利用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 16 Python
Python中用pycurl监控http响应时间脚本分享
Feb 02 Python
Python的Django框架中消息通知的计数器实现教程
Jun 13 Python
Python类属性的延迟计算
Oct 22 Python
Python入门之三角函数sin()函数实例详解
Nov 08 Python
python的socket编程入门
Jan 29 Python
python微信跳一跳游戏辅助代码解析
Jan 29 Python
python 遍历目录(包括子目录)下所有文件的实例
Jul 11 Python
Python玩转加密的技巧【推荐】
May 13 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
Aug 23 Python
pytorch+lstm实现的pos示例
Jan 14 Python
python数字图像处理之图像自动阈值分割示例
Jun 28 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中header的用法详解
2013/06/07 PHP
PHP操作MySQL事务实例
2014/11/05 PHP
PHP 前加at符合@的作用解析
2015/07/31 PHP
javascript编程起步(第六课)
2007/01/10 Javascript
js中 关于undefined和null的区别介绍
2013/04/16 Javascript
js 得到文件后缀(通过正则实现)
2013/07/08 Javascript
js 数值转换为3位逗号分隔的示例代码
2014/02/19 Javascript
Javascript优化技巧之短路表达式详细介绍
2015/03/27 Javascript
javascript实现图片跟随鼠标移动效果的方法
2015/05/13 Javascript
简单谈谈javascript Date类型
2015/09/06 Javascript
jQuery日历插件datepicker用法详解
2016/03/03 Javascript
完美JQuery图片切换效果的简单实现
2016/07/21 Javascript
nodejs实现的连接MySQL数据库功能示例
2018/01/25 NodeJs
vue 查看dist文件里的结构(多种方式)
2020/01/17 Javascript
vue 动态添加class,三个以上的条件做判断方式
2020/11/02 Javascript
[48:48]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python使用urllib模块和pyquery实现阿里巴巴排名查询
2014/01/16 Python
在Django中进行用户注册和邮箱验证的方法
2016/05/09 Python
Python中那些 Pythonic的写法详解
2019/07/02 Python
深入学习python多线程与GIL
2019/08/26 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
2020/07/01 Python
python实现三种随机请求头方式
2021/01/05 Python
const和static readonly区别
2013/05/20 面试题
经典大学生求职信范文
2014/01/06 职场文书
幼儿园大班新学期寄语
2014/01/18 职场文书
数控技校生自我鉴定
2014/04/19 职场文书
2014年教师节寄语
2014/08/11 职场文书
小学生一分钟演讲稿
2014/08/26 职场文书
庆六一活动总结
2014/08/29 职场文书
学校四风问题对照检查材料思想汇报
2014/09/26 职场文书
房屋买卖授权委托书
2014/09/27 职场文书
运动会开幕词
2015/01/28 职场文书
大学毕业论文致谢词
2015/05/14 职场文书
SQL Server 数据库实验课第五周——常用查询条件
2021/04/05 SQL Server
一文搞懂MySQL索引页结构
2022/02/28 MySQL
Java 使用类型为Object的变量指向任意类型的对象
2022/04/13 Java/Android