人在学校,身不禁己。总有一些奇奇怪怪的学习任务,须要咱们刷够必定的时长去完成,但这不少都是不太使人感兴趣的文字或是视频,而这些课都有共同的特色就是会间隔必定时间发出弹窗,确认屏幕前的咱们是否还在浏览页面。每次靠人工去点击,会严重影响咱们作其余正事的效率。编程
最近小李也须要刷够必定的学习时长。因而乎,我便找了好兄弟Python来帮忙。下面咱们就用Python来实现自动化刷课吧!
说到自动化,Selenium这个浏览器自动化测试框架就派上了用场,整个自动刷课的主角即是它。浏览器
那么为了实现自动刷课,咱们须要先实现网站登陆,才能在指定的帐号内进行操做。常规的,咱们须要在对应的位置,找到网页上对应的元素,并经过程序写入。app
而这里有个相对麻烦的东西,即验证码,而这个验证码是白底黑字,是简单的字母数字形式,天然而然地就想到了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模拟点击 登陆 按钮,便完成了登陆过程。学习
咱们须要进入的是这个实验室准入页面,完成相关课程的学习。测试
在编写代码的过程当中一直遇到报错,信息以下:ElementNotInteractableException ,即这个页面元素不能交互。我一度怀疑这个元素是由于 style 里的display属性设置成了none。通过观察发现,这个元素并无隐藏。网站
在面向Google编程中我发现了问题的所在,有大佬总结了这一类错误发生的缘由。spa
首先查看是否须要切换 iframe, 而后看看是否须要用js的方法来scroll滚动条,接着看看是否须要加等待时间,最后check下这个元素是不是能够点击的。
由于selenium操做页面切换可能没有那么块,sleep延时一下等页面切换了再进行元素的查找。code
问题解决以后咱们就来到了课程学习的页面。orm
而这个页面每一个5分钟就会弹出提醒框,而后暂停课程的学习,所以咱们须要利用selenium自动完成关闭提醒框的操做。
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)
这样咱们的程序就能够操做浏览器并完成必定时长的学习任务啦~
源代码我已经上传至后台,回复「自动刷课」便可得到