利用Python脚本实现自动刷网课


Posted in Python onFebruary 03, 2020

人在学校,身不由己。总有一些奇奇怪怪的学习任务,需要我们刷够一定的时长去完成,但这很多都是不太令人感兴趣的文字或是视频,而这些课都有共同的特点就是会间隔一定时间发出弹窗,确认屏幕前的我们是否还在浏览页面。每次靠人工去点击,会严重影响我们做其他正事的效率。

利用Python脚本实现自动刷网课

最近小李也需要刷够一定的学习时长。于是乎,我便找了好兄弟Python来帮忙。下面我们就用Python来实现自动化刷课吧!

说到自动化,Selenium这个浏览器自动化测试框架就派上了用场,整个自动刷课的主角便是它。

网站登录

那么为了实现自动刷课,我们需要先实现网站登录,才能在指定的账号内进行操作。常规的,我们需要在对应的位置,找到网页上对应的元素,并通过程序写入。

利用Python脚本实现自动刷网课

而这里有个相对麻烦的东西,即验证码,而这个验证码是白底黑字,是简单的字母数字形式,自然而然地就想到了Python的OCR库 tesserocr 。

把网站登录界面的验证码图片下载下来,调用 tesserocr 进行识别。输出result 即为读出的字符串序列。

def ocr():
    image=Image.open('captcha.jpg')
    image=image.convert('L')
    threshold=127
    table=[]
    for i in range(256):
      if i<threshold:
        table.append(0)
      else:
        table.append(1) 
    image=image.point(table,'1')
    result=tesserocr.image_to_text(image)
    return result

解决了验证码,我们直接用selenium模拟点击 登录 按钮,便完成了登录过程。

进入课程

我们需要进入的是这个实验室准入页面,完成相关课程的学习。

利用Python脚本实现自动刷网课

在编写代码的过程中一直遇到报错,信息如下:ElementNotInteractableException ,即这个页面元素不能交互。我一度怀疑这个元素是因为 style 里的display属性设置成了none。经过观察发现,这个元素并没有隐藏。

利用Python脚本实现自动刷网课

在面向Google编程中我发现了问题的所在,有大佬总结了这一类错误发生的原因。

利用Python脚本实现自动刷网课

首先查看是否需要切换 iframe, 然后看看是否需要用js的方法来scroll滚动条,接着看看是否需要加等待时间,最后check下这个元素是否是可以点击的。

因为selenium操作页面切换可能没有那么块,sleep延时一下等页面切换了再进行元素的查找。

弹出框处理

问题解决之后我们就来到了课程学习的页面。

利用Python脚本实现自动刷网课

而这个页面每个5分钟就会弹出提醒框,然后暂停课程的学习,因此我们需要利用selenium自动完成关闭提醒框的操作。

利用Python脚本实现自动刷网课

def answer_confirm(self):
    # 每隔5分钟弹出确认窗口
    count=1
    while 1:
      try:
        confirm=self.browser.switch_to_alert()
        print(confirm.text)
        confirm.accept()
        print("您已经完成时长为{}分钟的阅读!".format(count*5))
        count+=1
        time.sleep(300)
      except:
        time.sleep(2)

这样我们的程序就可以操作浏览器并完成一定时长的学习任务啦~

利用Python脚本实现自动刷网课

总结

以上所述是小编给大家介绍的利用Python脚本实现自动刷网课,希望对大家有所帮助!

Python 相关文章推荐
Python模块学习 filecmp 文件比较
Aug 27 Python
python多重继承实例
Oct 11 Python
详解Python中的from..import绝对导入语句
Jun 21 Python
使用Python+Splinter自动刷新抢12306火车票
Jan 03 Python
python 读取DICOM头文件的实例
May 07 Python
浅谈dataframe中更改列属性的方法
Jul 10 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
Jul 30 Python
Python for i in range ()用法详解
Sep 18 Python
如何在向量化NumPy数组上进行移动窗口
May 18 Python
用python画城市轮播地图
May 28 Python
Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)
Jun 07 Python
用Python爬取英雄联盟的皮肤详细示例
Dec 06 Python
tensorflow 限制显存大小的实现
Feb 03 #Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
Feb 03 #Python
tensorflow指定GPU与动态分配GPU memory设置
Feb 03 #Python
TensorFlow内存管理bfc算法实例
Feb 03 #Python
python numpy数组中的复制知识解析
Feb 03 #Python
opencv python Canny边缘提取实现过程解析
Feb 03 #Python
Pycharm debug调试时带参数过程解析
Feb 03 #Python
You might like
用PHP实现的随机广告显示代码
2007/06/14 PHP
eAccelerator的安装与使用详解
2013/06/13 PHP
PHP+javascript制作带提示的验证码源码分享
2014/05/28 PHP
使用laravel的migrate创建数据表的方法
2019/09/30 PHP
PHP7 安装event扩展的实现方法
2019/10/08 PHP
php显示当前文件所在的文件以及文件夹所有文件以树形展开
2013/12/13 Javascript
jquery得到iframe src属性值的方法
2014/09/25 Javascript
jQuery中:checked选择器用法实例
2015/01/04 Javascript
js中不同的height, top的区别对比
2015/09/24 Javascript
基于nodejs+express(4.x+)实现文件上传功能
2015/11/23 NodeJs
jquery日历插件datepicker用法分析
2016/01/22 Javascript
图文详解Heap Sort堆排序算法及JavaScript的代码实现
2016/05/04 Javascript
基于EasyUI的基础之上实现树形功能菜单
2017/06/28 Javascript
Node.js+Express+MySql实现用户登录注册功能
2017/07/10 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
详解关于Vuex的action传入多个参数的问题
2019/02/22 Javascript
layui+SSM的数据表的增删改实例(利用弹框添加、修改)
2019/09/27 Javascript
js计时事件实现圆形时钟
2020/03/25 Javascript
使用 UniApp 实现小程序的微信登录功能
2020/06/09 Javascript
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
2017/05/18 Python
Python中static相关知识小结
2018/01/02 Python
Python实现获取系统临时目录及临时文件的方法示例
2019/06/26 Python
Django中自定义模型管理器(Manager)及方法
2019/09/23 Python
Python对Excel按列值筛选并拆分表格到多个文件的代码
2019/11/05 Python
Python远程开发环境部署与调试过程图解
2019/12/09 Python
如何利用Python写个坦克大战
2020/11/18 Python
浅谈HTML5 defer和async的区别
2016/06/07 HTML / CSS
Tiqets荷兰:出售欧洲最美丽的景点和博物馆门票
2018/01/09 全球购物
英国户外装备和冒险服装零售商:alloutdoor
2018/01/30 全球购物
屈臣氏官方旗舰店:亚洲享负盛名的保健及美妆零售商
2019/03/15 全球购物
日本航空官方网站:JAL
2019/06/19 全球购物
财政专业大学生职业生涯规划书
2014/09/17 职场文书
大班下学期幼儿评语
2014/12/30 职场文书
2015年企业工作总结范文
2015/04/28 职场文书
高考诚信考试承诺书
2015/04/29 职场文书
2016秋季幼儿园开学寄语
2015/12/03 职场文书