利用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实现的阳历转阴历(农历)算法
Apr 25 Python
Python深入学习之闭包
Aug 31 Python
使用70行Python代码实现一个递归下降解析器的教程
Apr 17 Python
python 中的int()函数怎么用
Oct 17 Python
python通过socket实现多个连接并实现ssh功能详解
Nov 08 Python
Python安装pycurl失败的解决方法
Oct 15 Python
Python进阶之自定义对象实现切片功能
Jan 07 Python
python opencv鼠标事件实现画框圈定目标获取坐标信息
Apr 18 Python
解决tensorboard多个events文件显示紊乱的问题
Feb 15 Python
python 深度学习中的4种激活函数
Sep 18 Python
浅析python实现动态规划背包问题
Dec 31 Python
python 实现的截屏工具
May 08 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获取服务器时间的实现代码
2013/06/07 PHP
php使用Image Magick将PDF文件转换为JPG文件的方法
2015/04/01 PHP
php判断linux下程序问题实例
2015/07/09 PHP
Yii2汉字转拼音类的实例代码
2017/04/18 PHP
php实现的错误处理封装类实例
2017/06/20 PHP
php基于环形链表解决约瑟夫环问题示例
2017/11/07 PHP
Javascript 垃圾收集机制介绍理解
2013/05/14 Javascript
onkeyup,onkeydown和onkeypress的区别介绍
2013/10/21 Javascript
javascript读写json示例
2014/04/11 Javascript
JavaScript基本语法讲解
2015/06/03 Javascript
jQuery实现的背景动态变化导航菜单效果
2015/08/24 Javascript
jQuery解析json数据实例分析
2015/11/24 Javascript
javascript实现的猜数小游戏完整实例代码
2016/05/10 Javascript
BootStrap的Datepicker控件使用心得分享
2016/05/25 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
2016/10/31 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
2017/07/11 Javascript
js设置随机切换背景图片的简单实例
2017/11/12 Javascript
微信小程序出现wx.navigateTo页面不跳转问题的解决方法
2017/12/26 Javascript
Vue 中axios配置实例详解
2018/07/27 Javascript
使用vue2实现带地区编号和名称的省市县三级联动效果
2018/11/05 Javascript
Koa日志中间件封装开发详解
2019/03/09 Javascript
[02:19]DOTA2上海特级锦标赛 观赛指南 Spectator Guide
2016/02/04 DOTA
[54:28]EG vs OG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
[56:42]VP vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
django实现登录时候输入密码错误5次锁定用户十分钟
2017/11/05 Python
Django中url的反向查询的方法
2018/03/14 Python
flask框架中勾子函数的使用详解
2018/08/01 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
2018/09/13 Python
意大利网上购书网站:Libraccio.it
2021/02/03 全球购物
大学毕业生通用求职信
2013/09/28 职场文书
学校工作推荐信范文
2014/07/11 职场文书
十佳好少年事迹材料
2014/08/21 职场文书
工作疏忽、懈怠的检讨书
2014/09/11 职场文书
委托证明范本
2014/11/25 职场文书
医生个人年终总结
2015/02/28 职场文书
幼儿园国培研修日志
2015/11/13 职场文书