使用python的selenium库刷超星网课
网课很多看不完呀
所以动手做了一个基础的自动答题和下一节的程序
用到了python 3
selenium
Chrome
如何自动化Chrome?https://www.cnblogs.com/eternal1025/p/8880245.html
配置好之后上代码
源码下载地址 https://github.com/zlaiyyf/ChaoXIing_seleniumm
时间紧张所以嘛bug就。。。。
coding:utf-8
from selenium import webdriver
# 显示等待
from selenium.webdriver.support.wait import WebDriverWait
# 启动参数
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import UnexpectedAlertPresentException,TimeoutException
from scrip import click
import time class Chaoxing(): def __init__(self,password,username):
"""
暂时不考虑其他学校的 :param password:
:param username:
""" chrome_opt = Options() # 创建参数设置对象.
# chrome_opt.add_argument('–start-maximized') # 设置浏览器窗口大小. chrome_opt.add_argument('--disable-infobars')
# chrome_opt.add_argument("-–start-maximized") chrome_opt.add_experimental_option('excludeSwitches', ['enable-automation'])
self.browser = webdriver.Chrome(chrome_options=chrome_opt)
self.username = username
self.password = password def land(self):
"""
登陆
:return:
""" self.browser.get('http://sxu.fanya.chaoxing.com/portal')
# self.browser.find_element_by_xpath('//input[@value= "登录"]').click()
WebDriverWait(self.browser, 30, 0.2).until(lambda x: x.find_element_by_xpath('//input[@value= "登录"]')).click()
# ActionChains(driver).click(click_btn)
WebDriverWait(self.browser, 30, 0.2).until(lambda x: x.find_element_by_xpath('//input[@id="unameId"]')).send_keys(self.username)
WebDriverWait(self.browser, 30, 0.2).until(lambda x: x.find_element_by_xpath('//input[@id="passwordId"]')).send_keys(self.password)
print('输入账号完成{}'.format(self.username))
time.sleep(10) WebDriverWait(self.browser, 30, 0.2).until(lambda x: x.find_element_by_xpath('//input[@value= "登录"]')).click() def find_course(self):
"""
发现课程
:return:
"""
self.browser.switch_to.frame('frame_content')
self.browser.find_elements_by_xpath('//li[@style="position:relative"]')
course_name = self.browser.find_elements_by_xpath('//h3[@class="clearfix"]')
click.click_couse(course_name,'创业创新领导力') windows = self.browser.window_handles
self.browser.switch_to.window(windows[-1])
self.couse()
def couse(self):
"""
进入课程
:return:
"""
class_num = -1
while True: time.sleep(2)
class_num = class_num + 1
class_name_list = self.browser.find_elements_by_xpath('//div[@class="leveltwo"]')
if class_num == len(class_name_list):
break
else:
print(class_num)
class_name_num = self.browser.find_elements_by_xpath('//div[@class="leveltwo"]')[class_num].text
print(class_name_num.split('\n'))
if '' == class_name_num.split('\n')[1]:
continue
class_name_tag = self.browser.find_elements_by_xpath('//span[@class="articlename"]')[class_num]
class_name = class_name_tag.text
class_name_tag.click() print('正在点击{}'.format(class_name)) time.sleep(2)
self.view(class_name=class_name)
continue
def view(self,class_name):
"""
看视频
:param class_name:
:return:
"""
# try:
self.browser.find_element_by_xpath('//span[@title="视频"]').click()
self.browser.switch_to.frame("iframe")
time.sleep(5)
self.browser.switch_to.frame(self.browser.find_element_by_xpath('//iframe[@class="ans-attach-online ans-insertvideo-online"]'))
WebDriverWait(self.browser, 30, 0.2).until(lambda x: x.find_element_by_xpath('//div[@id="video"]')).click() view_tag = self.browser.find_element_by_xpath('//div[@id="video"]')
ActionChains(self.browser).move_to_element(view_tag).perform()
while True:
time.sleep(2) if self.view_percentage() == '' :
self.browser.switch_to.default_content()
self.browser.find_element_by_xpath('//a[contains(text(), "回到课程")]').click()
break def view_percentage(self):
""""
检查是否看完
"""
# total_duration = self.browser.find_element_by_xpath('//span[@class="vjs-duration-display"]').text
# current_duration = self.browser.find_element_by_xpath('//span[@class="vjs-current-time-display"]').text
view_percentage_tag = self.browser.find_element_by_xpath('//div[@class="vjs-play-progress vjs-slider-bar"]')
view_percentage = view_percentage_tag.get_attribute('style')
print('当前进度'+view_percentage)
self.is_exist_problem()
""""
检查是否看完
"""
if '100%' in view_percentage :
return '' def is_exist_problem(self):
try:
problem_tag_style = WebDriverWait(self.browser, 30, 0.2).until(
lambda x: x.find_element_by_xpath('//div[@id="ext-comp-1035"]')).get_attribute('style') if problem_tag_style == 'overflow: auto;':
print('有题目')
input_tag_list = self.browser.find_elements_by_xpath('//input')
for input_tag in input_tag_list:
input_tag.click()
self.browser.find_element_by_xpath('//div[@class="ans-videoquiz-submit"]').click()
time.sleep(2)
if EC.alert_is_present()(self.browser):
self.browser.switch_to.alert.accept()
else:
break
else:
pass
except UnexpectedAlertPresentException:
print('alert出错')
self.browser.switch_to.alert.accept()
except TimeoutException:
print('TimeoutException')
pass
使用python的selenium库刷超星网课的更多相关文章
- 使用Python的selenium库制作脚本,支持后台运行
本文介绍如何使用Python的selenium库制作脚本.概念: Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome.Firefox.Safari等主流界面 ...
- python爬虫---selenium库的用法
python爬虫---selenium库的用法 selenium是一个自动化测试工具,支持Firefox,Chrome等众多浏览器 在爬虫中的应用主要是用来解决JS渲染的问题. 1.使用前需要安装这个 ...
- 安装python的selenium库和驱动
对于使用selenium来进行python爬虫操作可以简化好多操作,它实际上的运行就是通过打开一个浏览器来一步一步的按照你的代码来执行 如果安装过python编译器后应该pip工具也是有的,验证pyt ...
- python利用selenium库识别点触验证码
利用selenium库和超级鹰识别点触验证码(学习于静谧大大的书,想自己整理一下思路) 一.超级鹰注册:超级鹰入口 1.首先注册一个超级鹰账号,然后在超级鹰免费测试地方可以关注公众号,领取1000积分 ...
- Python爬虫-- selenium库
selenium库 selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(S ...
- 解决python 导入selenium 库后自动化运行成功但是报错问题
本章节开始进入自动化的基础教学了,首先我们要对我们的工具有一定的熟练使用程度,做自动化常用的工具一个是搭建 RobotFramework自动化框架,另外一个便是我们最常用的python 工作原理是比较 ...
- python beautiful soup库的超详细用法
原文地址https://blog.csdn.net/love666666shen/article/details/77512353 参考文章https://cuiqingcai.com/1319.ht ...
- Python:利用 selenium 库抓取动态网页示例
前言 在抓取常规的静态网页时,我们直接请求对应的 url 就可以获取到完整的 HTML 页面,但是对于动态页面,网页显示的内容往往是通过 ajax 动态去生成的,所以如果是用 urllib.reque ...
- 浅谈python中selenium库调动webdriver驱动浏览器的实现原理
最近学web自动化时用到selenium库,感觉很神奇,遂琢磨了一下,写了点心得. 当我们输入以下三行代码并执行时,会发现新打开了一个浏览器窗口并访问了百度首页,然而这是怎么做到的呢? from se ...
随机推荐
- Laravel 中如何区别 Model 或者是 Builder?
User::where('id',1)->update([]) 和 User::find(1)->update([]) 有异曲同工之效. 额? 当你通过 Laravel 与数据库交 ...
- React 番外篇
小技巧:如果我们想了解一门技术,不知道如何学习,那就在 BOSS 直聘上,来看看对这门技术的要求 这篇给大家讲的是 React 1.0 的初始版本,仅仅是让大家有个了解,毕竟回顾历史,我们才能找到他最 ...
- java 百度地图判断两点距离2
package baiduApi; public class BaiDuMap { static double DEF_PI = 3.14159265359; // PI static double ...
- 图片加载框架之ImageLoader
Android开发中,多少会接触到异步加载图片,或者加载大量图片的问题,而加载图片我们常常会遇到许多的问题,比如说图片的错乱,OOM等问题,对于这些问题解决起来会比较吃力,比较著名的就是Univers ...
- JavaFx入门(一)
JavaFx和Swing的对比: javaFX确实比swing好看些,但没有swing的事件按钮等写法爽快,特别是使用eclipse的matisse开发视图,托拉拽的方式.可javaFX不只是有swi ...
- OpenStack 对接 Ceph 环境可以创建卷但不能挂载卷的问题
问题 环境:Nova.Cinder.Glance 都对接了 Ceph RBD 后端存储. 以往的操作包括上传镜像.创建卷.挂载卷都是一切正常的,但突然出现了无法挂载卷的问题,而且还是因为 Ceph 客 ...
- pyqt5的QListWidget中设置右键菜单
QListWidget 是继承 QWidget 的, 所以 QListWidget 是有右键菜单的, 从文档上可以找到 QWidget 上有以下两个与右键菜单有关的函数: Qt.ContextMenu ...
- debian系统安装vsftpd服务端和ftp客户端
一.服务器安装和配置 1.安装vsftpd.(此处切换到su权限下了.其它用户请使用sudo权限,没有sudo权限的看前面的教程进行安装) apt-get install vsftpd 2.配置vsf ...
- tween.js的API实践
看了网上多篇关于tween的使用教程,基本上千篇一律,大多数的写法都是像下面这样: function initTween(geometry) { }; tween = }, ); tween.easi ...
- PTA --- 天梯赛 L1-028 判断素数
L1-028 判断素数 (10 point(s)) 本题的目标很简单,就是判断一个给定的正整数是否素数. 输入格式: 输入在第一行给出一个正整数N(≤ 10),随后N行,每行给出一个小于231 ...