利用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中unittest模块做UT(单元测试)使用实例
Jun 12 Python
Python中类型检查的详细介绍
Feb 13 Python
Python 通配符删除文件的实例
Apr 24 Python
python tkinter界面居中显示的方法
Oct 11 Python
浅谈Scrapy网络爬虫框架的工作原理和数据采集
Feb 07 Python
Pytorch的mean和std调查实例
Jan 02 Python
python下载卫星云图合成gif的方法示例
Feb 18 Python
Mac中PyCharm配置Anaconda环境的方法
Mar 04 Python
Python单元测试及unittest框架用法实例解析
Jul 09 Python
PyQt5的相对布局管理的实现
Aug 07 Python
Python使用struct处理二进制(pack和unpack用法)
Nov 12 Python
pandas数据分组groupby()和统计函数agg()的使用
Mar 04 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
PHP5.0对象模型探索之抽象方法和抽象类
2006/09/05 PHP
PHP调用Linux命令权限不足问题解决方法
2015/02/07 PHP
php实现两个数组相加的方法
2015/02/17 PHP
PHP中curl_setopt函数用法实例分析
2015/04/16 PHP
Thinkphp5.0 框架Model模型简单用法分析
2019/10/11 PHP
php在linux环境中如何使用redis详解
2020/12/15 PHP
不用AJAX和IFRAME,说说真正意义上的ASP+JS无刷新技术
2008/09/25 Javascript
精通JavaScript 纠正 cleanWhitespace函数
2010/03/11 Javascript
js触发asp.net的Button的Onclick事件应用
2013/02/02 Javascript
JS函数重载的解决方案
2014/05/13 Javascript
jQuery中siblings()方法用法实例
2015/01/08 Javascript
BootStrap 智能表单实战系列(五) 表单依赖插件处理
2016/06/13 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
基于vue实现swipe轮播组件实例代码
2017/05/24 Javascript
Vue SPA单页应用首屏优化实践
2018/06/28 Javascript
基于vue cli 通过命令行传参实现多环境配置
2018/07/12 Javascript
ES6知识点整理之Proxy的应用实例详解
2019/04/16 Javascript
node.js制作一个简单的登录拦截器
2020/02/10 Javascript
[00:44]TI7不朽珍藏III——军团指挥官不朽展示
2017/07/15 DOTA
[43:24]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS Liquid
2018/03/30 DOTA
Python编程中的异常处理教程
2015/08/21 Python
PyQt5根据控件Id获取控件对象的方法
2019/06/25 Python
django 控制页面跳转的例子
2019/08/06 Python
python 字典 setdefault()和get()方法比较详解
2019/08/07 Python
使用Python实现文字转语音并生成wav文件的例子
2019/08/08 Python
python 实现生成均匀分布的点
2019/12/05 Python
Pytorch学习之torch用法----比较操作(Comparison Ops)
2020/06/28 Python
纯css3制作煽动翅膀的蝴蝶的示例
2018/04/23 HTML / CSS
西班牙英格列斯百货英国官网:El Corte Inglés英国
2017/10/30 全球购物
int *p=NULL和*p= NULL有什么区别
2014/10/23 面试题
函数只定义了一次, 调用了一次, 但编译器提示非法重定义了-什么问题?
2014/10/03 面试题
人力资源主管岗位职责
2014/01/29 职场文书
大学毕业生推荐信
2014/07/09 职场文书
临床医学生职业规划书范文
2014/10/25 职场文书
MySQL 5.7常见数据类型
2021/07/15 MySQL
详解在OpenCV中如何使用图像像素
2022/03/03 Python