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的更多相关文章

  1. Python写一个自动点餐程序

    Python写一个自动点餐程序 为什么要写这个 公司现在用meican作为点餐渠道,每天规定的时间是早7:00-9:40点餐,有时候我经常容易忘记,或者是在地铁/公交上没办法点餐,所以总是没饭吃,只有 ...

  2. 网课应该这么刷(油猴Tampermonkey脚本自动刷课)

    懒人福利 首先有些人不想学怎么用脚本,满足你们,压缩包解压之后直接登录即可.戳我下载 脚本已经集成好了,登录即可刷课.章节测试还会自动答题呦,正确率高达97%呦. 油猴及脚本安装 油猴的脚本不知可以刷 ...

  3. 智慧树mooc自动刷课代码

    最近学习javaScript和JQuery,恰好还有一门mooc没有看.结合学习的知识和其他人的代码:撸了一个自动播放课程的代码,同时自动跳过单章的测试题. 用电脑挂着不动就完事了. 如下: var ...

  4. Python实现12306自动查票程序

    这是在网上扒拉过来的,原文链接: http://blog.csdn.net/An_Feng_z/article/details/78631290 目前时间2018/01/04 文中各种接口均为可用,亲 ...

  5. 利用python完成大学刷课(从0到完成的思路)

    i春秋作家:tllm 原文来自:利用python完成大学刷课(从0到完成的思路) 最近刚刚开学,学校总是有很多让人无语的课要修,还不能不修.然后我想写一个自动修课的脚本.大佬们不要笑我 是边面向百度学 ...

  6. CSDN不限积分代下载,知网、万方、sci、IEEE论文代下载,智慧树、超星尔雅刷课

    下载内容: 1.CSDN不限积分代下载. 2.知网.万方.sci.IEEE论文代下载. 3.超星尔雅,智慧树刷课. 注:由于本人手抖买一个CSDN会员,想挽回一点损失,所以创立了一个下载群,绝对不是骗 ...

  7. 简单的自动化使用--使用selenium实现学习通网站的刷慕课程序。注释空格加代码大概200行不到

    简单的自动化使用--使用selenium实现学习通网站的刷慕课程序.注释空格加代码大概200行不到 相见恨晚啊 github地址 环境Python3.6 + pycharm + chrom浏览器 + ...

  8. [Windows] 智慧职教刷课软件(职教雨滴1.9更新完成)

    (智慧职教刷课软件-职教雨滴)支持职教云(云课堂)的课程 2019年10月17日 16:19:57 增加支持资料库,MOOC 点击链接加入群聊[职教雨滴反馈群]:https://jq.qq.com/? ...

  9. Python小白的数学建模课-09 微分方程模型

    小白往往听到微分方程就觉得害怕,其实数学建模中的微分方程模型不仅没那么复杂,而且很容易写出高水平的数模论文. 本文介绍微分方程模型的建模与求解,通过常微分方程.常微分方程组.高阶常微分方程 3个案例手 ...

随机推荐

  1. 关于H5判定区域里面滑动到底部,加载更多的总结

    1.如何判定H5中滑动到底部,然后加载更多的功能实现. 思路:我们需要设定一个固定高度的盒子,然后我们利用scroll来监听滚动,当scrollTop(滚动的距离) + clientHeight(页面 ...

  2. 关于System.ArgumentNullException异常

    什么是ArgumentNullException 当将 null 引用(Visual Basic 中为 Nothing)传递到不接受其作为有效参数的方法时引发的异常. 继承 Object Except ...

  3. 关于System.AccessViolationException异常

    什么是AccessViolationException 试图读写受保护内存时引发的异常. 继承 Object Exception SystemException AccessViolationExce ...

  4. CLR 调试体系结构

    公共语言运行时 (CLR) 调试 API 专门用作操作系统内核的一部分. 在非托管代码中,当程序生成异常时,内核将暂停执行进程,并使用 Win32 调试 API 将异常信息传递给调试器. CLR 调试 ...

  5. [USACO12MAR]花盆 二分 单调队列

    [USACO12MAR]花盆 二分 单调队列 存在一个长度为\(x\)的区间\([l,r]\),使得区间中最大值与最小值差至少为\(w\),求这个最小的\(x\) \(n\le 100000\),\( ...

  6. 用户价值和RFM模型

    什么是用户价值? 用户价值就是对公司来说有用的地方,比如有的公司看中用户的消费能力,有的公司则看中用户的忠诚度 .各公司的业务目的不同,用户价值的体现自然也不同.这里主要说一下适用于电商的RFM模型. ...

  7. 干货 | 10分钟带你全面掌握branch and bound(分支定界)算法-概念篇

    00 前言 之前一直做启发式算法,最近突然对精确算法感兴趣了.但是这玩意儿说实话是真的难,刚好boss又叫我学学column generation求解VRP相关的内容.一看里面有好多知识需要重新把握, ...

  8. 《Java理解程序逻辑试题分析》

    1.以下关于开发java程序的描述错误的是 (). (选择一项) A:开发Java程序的步骤包括:编写源程序.编译.运行 B:编写的Java源程序文件使用 java作为扩展名 C:Java源文件经编译 ...

  9. c++中关于堆和堆栈的区别

    在C++中,内存分成5个区,他们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区.       栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量 的存储区.里面的变量通常是局部 ...

  10. mongodb启动命令与端口设置

    一.mongodb安装和配置 1.创建tools目录,用于存放安装包 cd /usr/local mkdir -p tools cd tools 2.下载mongodb包(其它版本请自行下载) wge ...