python网课自动刷课程序-------selenium+chromedriver
python的强大之处就在于有许多已经写好的功能库提供,这些库强大且易用,对于写一些有特定功能的小程序十分方便。
现在就用pyhton的selenium+谷歌游览器写一个可以自动刷课的程序,以智慧树上的网课为例。
原理说明:selenium 是一套完整的web应用程序测试系统,可以模拟真实游览器,支持多种游览器。简单来说就是可以定位到html元素,比如按钮,输入框之类的,然后模拟点击,模拟输入等从而实现自动化效果。selenium难点在于定位元素。
selenium的一些基本用法:
https://blog.csdn.net/weixin_36279318/article/details/79475388
一 .开始之前准备
1.安装selenium:在cmd窗口输入:pip isntaller selenium
2.下载谷歌游览器的驱动chromedriver:https://pan.baidu.com/s/1_wopkNwvmKvqLlNxY_EagQ (7yxk)
3.安装一个谷歌游览器,最好是最新版的
二.分析网站
要定位元素就要分析网站的一些元素的源代码是如何写的。
1.智慧树的登陆页面


2.用谷歌游览器的审查元素功能查看元素的源代码
按右键选择审查或按F12,得到如下的页面

可以看到输入手机号那一个输入框有一个id选择器,这样就可以根据id选择器的名字定位到这个元素。
其它元素也可以用同样的方法定位元素,然后根据具体情况选择不同的定位方式。

3.写代码
from selenium import webdriver import time
import threading browser=webdriver.Chrome()
#请求登陆页面
browser.get('https://passport.zhihuishu.com/login?service=http://online.zhihuishu.com/onlineSchool/') #登陆
def login(number,password):
phone_number=browser.find_element_by_id('lUsername')#通过id定位,手机号码
pwd=browser.find_element_by_id('lPassword')#密码
login_btn=browser.find_element_by_class_name('wall-sub-btn')#登陆按钮 phone_number.send_keys(number)#输入手机号码
pwd.send_keys(password)#输入密码
login_btn.click()#点击登陆按钮 #转到播放视频页面
def to_course(key): time.sleep(5)
current=browser.current_window_handle#当前页面的句柄
key=browser.find_element_by_partial_link_text(key)#找到课程
key.click()#跳转到播放视频页面
time.sleep(1)#等待页面加载
#因为跳转到新的页面,所以browser要切换到新的页面操作
handles=browser.window_handles
for handle in handles:
if handle!=current:
browser.switch_to.window(handle) time.sleep(10)
try:
video=browser.find_element_by_id('mediaplayer')#定位视频窗口
video.click()#点击播放
except:
pass #判断是否有答题窗口弹出
def is_exist():
while True:
try:
browser.switch_to.default_content()
browser.switch_to.frame('tmDialog_iframe')#答题窗口在另一个frame里面,要切换
box=browser.find_elements_by_class_name('answerOption')#答题列表
radio=box[0].find_element_by_tag_name('input')#找到第一个选项
radio.click()#选择
browser.switch_to.default_content()
browser.find_element_by_link_text('关闭').click()#关闭答题窗口
except:
browser.switch_to.parent_frame()#没有弹出,切换回本来的frame
time.sleep(5) #判断当前视频是否结束
def is_end():
while True:
try:
video=browser.find_element_by_id('mediaplayer')#定位视频窗口
#获取当前播放的进度
current_time=video.find_element_by_class_name('currentTime').get_attribute('textContent')
#该视频的总时间
total_time=video.find_element_by_class_name('duration').get_attribute('textContent')
print(current_time,total_time)
if current_time==total_time:
#当前视频播放结束,点击下一节
js="document.ElementById('nextBtn').click()"#js脚本
browser.execute_script(js) time.sleep(10)#10秒检测一次
except:
current_time='00:00'
total_time='00:01' if __name__=='__main__': '''
number=''#手机号码
password=''#密码
key=''#课程名称,可以部分名字 '''
login(number,password)
to_course(key)
#开两个线程
t1=threading.Thread(target=is_exist)
t2=threading.Thread(target=is_end)
t2.start()
time.sleep(3)
t1.start()
t2.join()
t1.join()
登陆过程:

-------------
这个程序只是做一个简单的演示,并没有做到很全面,但也可以用的。
selenium定位不到元素时会报错,要处理好,否则程序就没用了。元素定位最好使用WebDriverWait的方式,加上异常控制。
网站是会变化的,分析好网站操作基本的过程,基本没有问题了。
selenium定位不到元素有以下几种情况
1.通过class定位时,有时定位不到
2.页面没有加载出来,元素无法定位
3.元素不可见,无法定位
4.元素被其它元素遮挡了
5.方法用错了
python网课自动刷课程序-------selenium+chromedriver的更多相关文章
- Python写一个自动点餐程序
Python写一个自动点餐程序 为什么要写这个 公司现在用meican作为点餐渠道,每天规定的时间是早7:00-9:40点餐,有时候我经常容易忘记,或者是在地铁/公交上没办法点餐,所以总是没饭吃,只有 ...
- 网课应该这么刷(油猴Tampermonkey脚本自动刷课)
懒人福利 首先有些人不想学怎么用脚本,满足你们,压缩包解压之后直接登录即可.戳我下载 脚本已经集成好了,登录即可刷课.章节测试还会自动答题呦,正确率高达97%呦. 油猴及脚本安装 油猴的脚本不知可以刷 ...
- 智慧树mooc自动刷课代码
最近学习javaScript和JQuery,恰好还有一门mooc没有看.结合学习的知识和其他人的代码:撸了一个自动播放课程的代码,同时自动跳过单章的测试题. 用电脑挂着不动就完事了. 如下: var ...
- Python实现12306自动查票程序
这是在网上扒拉过来的,原文链接: http://blog.csdn.net/An_Feng_z/article/details/78631290 目前时间2018/01/04 文中各种接口均为可用,亲 ...
- 利用python完成大学刷课(从0到完成的思路)
i春秋作家:tllm 原文来自:利用python完成大学刷课(从0到完成的思路) 最近刚刚开学,学校总是有很多让人无语的课要修,还不能不修.然后我想写一个自动修课的脚本.大佬们不要笑我 是边面向百度学 ...
- CSDN不限积分代下载,知网、万方、sci、IEEE论文代下载,智慧树、超星尔雅刷课
下载内容: 1.CSDN不限积分代下载. 2.知网.万方.sci.IEEE论文代下载. 3.超星尔雅,智慧树刷课. 注:由于本人手抖买一个CSDN会员,想挽回一点损失,所以创立了一个下载群,绝对不是骗 ...
- 简单的自动化使用--使用selenium实现学习通网站的刷慕课程序。注释空格加代码大概200行不到
简单的自动化使用--使用selenium实现学习通网站的刷慕课程序.注释空格加代码大概200行不到 相见恨晚啊 github地址 环境Python3.6 + pycharm + chrom浏览器 + ...
- [Windows] 智慧职教刷课软件(职教雨滴1.9更新完成)
(智慧职教刷课软件-职教雨滴)支持职教云(云课堂)的课程 2019年10月17日 16:19:57 增加支持资料库,MOOC 点击链接加入群聊[职教雨滴反馈群]:https://jq.qq.com/? ...
- Python小白的数学建模课-09 微分方程模型
小白往往听到微分方程就觉得害怕,其实数学建模中的微分方程模型不仅没那么复杂,而且很容易写出高水平的数模论文. 本文介绍微分方程模型的建模与求解,通过常微分方程.常微分方程组.高阶常微分方程 3个案例手 ...
随机推荐
- edgedb-js 来自官方的js 驱动
目前对于edgedb 主要还是来自官方的python驱动,目前js 版本的已经快发布了,代码在github 可以看到了 同时官方文档也提供了一个关于edgedb 内部的协议说明,结合js 驱动以及文档 ...
- P4218 [CTSC2010]珠宝商
P4218 [CTSC2010]珠宝商 神题... 可以想到点分治,细节不写了... (学了个新姿势,sam可以在前面加字符 但是一次点分治只能做到\(O(m)\),考虑\(\sqrt n\)点分治, ...
- 洛谷 题解 P3984 【高兴的津津】
潇洒の开始 大水题一枚/小声说话 先吐槽一下: 为什么津津经历了魔鬼训练就可以Au日常QWQ,人家也是早起晚睡的好吧 (谁说魔鬼训练就一定是早起晚睡的) 思路 津津的高兴是持续m天的,但是一旦在这m中 ...
- nodejs之MongoDB安装[windows平台]
下载MongoDB,本为下载msi文件安装,下载地址 下载完成之后直接双击文件安装,安装时注意安装路径 创建一个空文件夹,用于存放数据库文件 通过控制台进入安装目录下的bin目录,或者在bin ...
- 手动停止jquery ajax请求
主要调用jquery提供的ajax abort方法,详细代码如下: <html> <head> <meta charset="UTF-8"> & ...
- 关于移动虚拟机后,linux网卡启动异常问题解决
废话不多说,直接上解决办法. 首先执行命令:ifconfig -a 会发现原来是eth0, 而现在变成了eth1了 然后我们编辑规则配置信息: vim /etc/udev/rule.d/70-pers ...
- px,em和rem
1 px像素(Pixel).相对长度单位.像素px是相对于显示器屏幕分辨率而言的 2 em是相对长度单位.相对于当前对象内文本的字体尺寸.如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字 ...
- updateprimarykey 和updateprimaryKeySelective
updateprimarykey 会对左右的字段都进行更新,updateprimaryKeySelective 只会对不为null的字段进行更新..所以在填表的web项目需要注意这个两个方法的选择,因 ...
- 分布式CAP理论介绍:一致性(Consistency),可用性(Availability),容忍网络分区(Partition tolerance)
在理论计算机科学中,CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer's theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点: 一致性(Consisten ...
- 含有虚拟列的表 怎么用EXP导出?
最近导一个测试库,报有虚拟列的表不支持,如下: EXP-00107: Feature (VIRTUAL COLUMN) of column CTB_CLIENT_SUBMIT_TIME_MONTH i ...