利用Python脚本实现自动刷网课
作者:librauee 发布时间:2023-04-20 12:39:16
人在学校,身不由己。总有一些奇奇怪怪的学习任务,需要我们刷够一定的时长去完成,但这很多都是不太令人感兴趣的文字或是视频,而这些课都有共同的特点就是会间隔一定时间发出弹窗,确认屏幕前的我们是否还在浏览页面。每次靠人工去点击,会严重影响我们做其他正事的效率。
最近小李也需要刷够一定的学习时长。于是乎,我便找了好兄弟Python来帮忙。下面我们就用Python来实现自动化刷课吧!
说到自动化,Selenium这个浏览器自动化测试框架就派上了用场,整个自动刷课的主角便是它。
网站登录
那么为了实现自动刷课,我们需要先实现网站登录,才能在指定的账号内进行操作。常规的,我们需要在对应的位置,找到网页上对应的元素,并通过程序写入。
而这里有个相对麻烦的东西,即验证码,而这个验证码是白底黑字,是简单的字母数字形式,自然而然地就想到了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编程中我发现了问题的所在,有大佬总结了这一类错误发生的原因。
首先查看是否需要切换 iframe, 然后看看是否需要用js的方法来scroll滚动条,接着看看是否需要加等待时间,最后check下这个元素是否是可以点击的。
因为selenium操作页面切换可能没有那么块,sleep延时一下等页面切换了再进行元素的查找。
弹出框处理
问题解决之后我们就来到了课程学习的页面。
而这个页面每个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)
这样我们的程序就可以操作浏览器并完成一定时长的学习任务啦~
总结
以上所述是小编给大家介绍的利用Python脚本实现自动刷网课,希望对大家有所帮助!
来源:https://segmentfault.com/a/1190000021675928


猜你喜欢
- (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) 网站的数据库连接语句为:Ser
- 在开发过程中,很多时候我们有分割字符串的需求,即把一个字符串按照某种分割符进行切割。在 Go 语言中,分割字符串我们可以分为几种情况,分别为
- 简述mat参照了函数设计,plot表示绘图的作用,lib则表示一个集合。今年在开源社区的推动下,Matplotlib在科学计算领域得到了广泛
- Sql server中常用的几个数据类型: binary 固定长度的二进制数据,其最大长度为 8,000 个字节。 varbinary 可变
- 本文实例讲述了Python实现处理管道的方法。分享给大家供大家参考。具体分析如下:Linux下的可以施展的最炫的魔法是什么?相信不同的人说法
- PHP join() 函数实例把数组元素组合为一个字符串:<?php $arr = array('Hello',
- 前言日志收集项目的准备中,本文主要讲的是利用golang的tail库,监听日志文件的变动,将日志信息发送到kafka中。涉及的golang库
- 在程序的开发过程中,处理分页是大家接触比较频繁的事件,因为现在软件基本上都是与数据库进行挂钩的。但效率又是我们所追求的,如果是像原来那样把所
- 问题一: 在anconda里面如何创建新的python环境(也就是更换新的python版本)1.先打开anconda软件,创建需要的环境2.
- 引用自百度知道里面的一个问答例如数组{1,2,3,4,5}要把数组里面的3删除得到{1,2,4,5}js代码:<script type
- opencv OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac
- 数据表都已经创建起来了,假设我们已经插入了许多的数据,我们就可以用自己喜欢的方式对数据表里面的信息进行检索和显示了,比如说:可以象下面这样把
- 啥是依赖规范可以以各种形式指定项目的依赖项,取决于依赖项的类型以及安装项目可能需要的可选约束版本约束^ 约束编写规范允许的版本范围^1.2.
- 我就废话不多说了,直接上代码吧!# 寻找局部最高点# 输入input: 含有最高点高度的列表# 输出output: 返回最高点的位置# 时间
- 代码如下:url="http://www.cidianwang.com/" wstr=getHTTPPage(
- 一 基本知识millisecond 毫秒microsecond 微秒 nanosecond 纳秒1秒=1000毫秒 1毫秒=1000微秒 1
- MSXML是微软非托管代码栈中最为核心的XML服务集合,不但适合基于COM的开发应用,更是微软AJAX解决方案和客户端XSLT解决方案的核心
- 本文实例讲述了Python Datetime模块和Calendar模块用法。分享给大家供大家参考,具体如下:datetime模块1.1 概述
- 在之前的工作中,业务方做了一些调整,提出了对一部分核心指标做更细致的拆分并定期产出的需求。出于某些原因,这部分数据不太方便在报表上呈现,因此
- 视频的播放过程可以简单理解为一帧一帧的画面按照时间顺序呈现出来的过程,就像在一个本子的每一页画上画,然后快速翻动的感觉。但是在实际应用中,并