利用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 文件重命名工具代码
Jul 26 Python
从零学Python之hello world
May 21 Python
Python日期的加减等操作的示例
Aug 15 Python
Python实现的朴素贝叶斯分类器示例
Jan 06 Python
JS设计模式之责任链模式实例详解
Feb 03 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
Jun 20 Python
win7下python3.6安装配置方法图文教程
Jul 31 Python
python 将list转成字符串,中间用符号分隔的方法
Oct 23 Python
关于python下cv.waitKey无响应的原因及解决方法
Jan 10 Python
python编程进阶之类和对象用法实例分析
Feb 21 Python
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
Jan 24 Python
Python爬取某拍短视频
Jun 11 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警告Creating default object from empty value 问题的解决方法
2014/04/02 PHP
PHP is_subclass_of函数的一个BUG和解决方法
2014/06/01 PHP
php实现过滤UBB代码的类
2015/03/12 PHP
PHP目录操作实例总结
2016/09/27 PHP
PHP中检查isset()和!empty()函数的必要性
2019/02/13 PHP
新浪刚打开页面出来的全屏广告代码
2007/04/02 Javascript
js parsefloat parseint 转换函数
2010/01/21 Javascript
js实现下拉列表选中某个值的方法(3种方法)
2015/12/17 Javascript
Bootstrap CSS组件之按钮组(btn-group)
2016/12/17 Javascript
Javascript 实现计算器时间功能详解及实例(二)
2017/01/08 Javascript
微信小程序 后台登录(非微信账号)实例详解
2017/03/31 Javascript
bootstrap3 dialog 更强大、更灵活的模态框
2017/04/20 Javascript
Vue.js 中的 $watch使用方法
2017/05/25 Javascript
详解vue-cli 构建Vue项目遇到的坑
2017/08/30 Javascript
AngularJs ng-change事件/指令的用法小结
2017/11/01 Javascript
jQuery实现下拉菜单动态添加数据点击滑出收起其他功能
2018/06/14 jQuery
Vue条件循环判断+计算属性+绑定样式v-bind的实例
2018/09/18 Javascript
对angularjs框架下controller间的传值方法详解
2018/10/08 Javascript
Python中super的用法实例
2015/05/28 Python
Python画图学习入门教程
2016/07/01 Python
关于Python中的向量相加和numpy中的向量相加效率对比
2019/08/26 Python
django自带调试服务器的使用详解
2019/08/29 Python
python super函数使用方法详解
2020/02/14 Python
Django bulk_create()、update()与数据库事务的效率对比分析
2020/05/15 Python
Python Excel vlookup函数实现过程解析
2020/06/22 Python
解决python的空格和tab混淆而报错的问题
2021/02/26 Python
英国男士时尚网站:Dandy Fellow
2018/02/09 全球购物
菲律宾优惠券网站:MetroDeal
2019/04/12 全球购物
美体小铺印度官网:The Body Shop印度
2019/10/17 全球购物
募捐倡议书
2014/04/14 职场文书
关于运动会的广播稿(10篇)
2014/09/12 职场文书
2014年入党积极分子学习三中全会思想汇报
2014/09/13 职场文书
Nginx如何配置Http、Https、WS、WSS的方法步骤
2021/05/11 Servers
Centos环境下Postgresql 安装配置及环境变量配置技巧
2021/05/18 PostgreSQL
Prometheus 监控MySQL使用grafana展示
2021/08/30 MySQL
国产动画《万圣街》日语配音版制作决定!
2022/03/20 国漫