利用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中字符串对齐方法介绍
May 21 Python
详解Python多线程
Nov 14 Python
python常见的格式化输出小结
Dec 15 Python
学习Python selenium自动化网页抓取器
Jan 20 Python
Python操作mongodb的9个步骤
Jun 04 Python
python调用外部程序的实操步骤
Mar 04 Python
python自动发邮件总结及实例说明【推荐】
May 31 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
Sep 20 Python
浅谈在JupyterNotebook下导入自己的模块的问题
Apr 16 Python
基于opencv的selenium滑动验证码的实现
Jul 24 Python
Python如何导出导入所有依赖包详解
Jun 08 Python
Python实现简单的俄罗斯方块游戏
Sep 25 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实现12306火车票余票查询和价格查询(12306火车票查询)
2014/01/14 PHP
Laravel SQL语句记录方式(推荐)
2016/05/26 PHP
PHP的静态方法与普通方法用法实例分析
2019/09/26 PHP
Query中click(),bind(),live(),delegate()的区别
2013/11/19 Javascript
JS根据年月获得当月天数的实现代码
2014/07/03 Javascript
jquery+正则实现统一的表单验证
2015/09/20 Javascript
深入浅析同源策略和跨域访问
2015/11/26 Javascript
Javascript将字符串日期格式化为yyyy-mm-dd的方法
2016/10/27 Javascript
两种简单的跨域方法(jsonp、php)
2017/01/02 Javascript
JS中如何实现点击a标签返回页面顶部的问题
2017/01/19 Javascript
JS变量及其作用域
2017/03/29 Javascript
微信小程序 页面跳转如何实现传值
2017/04/05 Javascript
jQuery基于cookie实现换肤功能实例
2017/10/14 jQuery
js与jQuery实现的用户注册协议倒计时功能实例【三种方法】
2017/11/09 jQuery
解决Webpack 热部署检测不到文件变化的问题
2018/02/22 Javascript
vue实现select下拉显示隐藏功能
2019/09/30 Javascript
纯 JS 实现放大缩小拖拽功能(完整代码)
2019/11/25 Javascript
python 正则表达式参数替换实例详解
2020/01/17 Python
Django 解决model 反向引用中的related_name问题
2020/05/19 Python
CSS3中新增的对文本和字体的设置
2020/02/03 HTML / CSS
美国户外服装和装备购物网站:Outland USA
2020/03/22 全球购物
JBL加拿大官方商店:扬声器、耳机等
2020/10/23 全球购物
Java语言程序设计测试题改错题部分
2014/07/22 面试题
生物技术毕业生自荐信
2013/10/23 职场文书
写给保洁员表扬信
2014/01/08 职场文书
五型班组建设方案
2014/02/10 职场文书
环境工程专业自荐信范文
2014/03/18 职场文书
安全教育月活动总结
2014/05/05 职场文书
建设投标担保书
2014/05/13 职场文书
建筑工地标语
2014/06/18 职场文书
市委常委会班子党的群众路线教育实践活动整改方案
2014/10/25 职场文书
惹女朋友生气检讨书
2015/05/06 职场文书
大学生违纪检讨书范文
2015/05/07 职场文书
驾驶员安全责任协议书
2016/03/22 职场文书
阿里云ECS云服务器快照的概念以及如何使用
2022/04/21 Servers
python和anaconda的区别
2022/05/06 Python