安全微课自动刷课脚本的技术原理及使用教程

由 B1ue1nWh1te 发布

Github

本项目属于Sea-Open系列开源项目,Github仓库地址为:https://github.com/B1ue1nWh1te/Sea-Open

技术原理

基本介绍

从零实现本程序需要掌握:
Python中阶知识、网页行为分析、GET与POST基本概念

分析我们手动看课的过程,[登录-进入课程-疯狂点击下一步-完成课程-重复操作直到完成]。
这是典型的流水线工作,使用程序完成是比较容易实现的。

首先想办法实现用自己的账号登录,其次分析网页判断我们看完一门课的逻辑,它的逻辑是当我们点开一门课就调用“开始学习”的函数,当我们看完这门课后又会调用“结束学习”的函数,这时它的数据库中就会记录我们已经看完了这门课,而中间那些点击下一步的过程本质上是无用的,它是通过判断从开始到结束的时间是否大于等于10秒来验证你确实看了这门课。

那么我们就可以编写程序模拟上述过程,实现自动化刷课了。


1.构造请求头和封装时间戳函数

为了让服务器认为我们是真实的“人”在访问而不是程序,需要在访问时添加上正常的请求头。

由于整个流程中使用到时间戳的地方较多,故将读取时间戳的操作封装为函数,便于操作。

1

2.获取登录二维码图片并展示

通过浏览器的开发者工具分析网页行为,可以得到登录时网页拉取登录二维码图片的接口,如图第一个红框所示。
我们通过图片的URL读取图片并展示,opencv-python库提供了相关函数。

2

3-1

访问接口可以得到imagePath字段(图片的URL路径)及barCodeCacheUserId字段(用于为这张二维码标记,后续判断是否扫码成功)。

3-2

注意到上图第二个红框,它使用了轮询而非websocket,网页每隔一段时间就会访问接口以判断用户是否扫码授权。

3.登录成功后读取用户数据

4

程序访问这个扫码验证接口,若得知用户已经授权登录,则可获取到用户的一些身份ID,后续传入Study函数即可为这名用户刷课。

4.自动刷课

按照[选择课程类型-获取该类型课程的列表-对列表遍历并进行(若课程未完成-访问开始学习接口-延迟10秒<最初是不用的,6月份出现了..>-访问结束学习接口)]的流程进行循环操作,直到刷课完成。

5

6

5.异常判断

由于网络原因可能会造成接口访问失败或超时,加入异常判断可以避免程序意外退出。

7

使用教程

1.安装Python并配置环境变量

我使用的版本是Python 3.7.5,到官网下载安装包,之后参考下图进行配置(为了方便我从网上直接截图了)。

8

9

2.下载脚本并解压

下载脚本并将项目文件夹解压到D盘根目录下(路径也可自行选择)

10

3.CMD路径切换

按下快捷键 Win+R 调出窗口并输入 cmd 运行命令行工具,将路径切换到本项目所在的文件夹。

11

假设你已经将项目文件夹 FinishSecurityCourse 下载并存放在D盘根目录下,则在cmd中使用如下命令切换路径:

D:
cd FinishSecurityCourse

12

4.安装依赖库

使用 pip install -r requirements.txt 命令安装依赖库

5.运行脚本

使用 python FinishSecurityCourse.py 命令运行脚本

6.扫码登录

按照脚本运行后的提示进行操作即可

13

7.完成效果

进度条拉到80%

14


17 条留言

  1. 小半
    小半 · 2021-08-27 13:03

    登录不上是因为登录界面的,userprojectID,没有了,自己看一下这个id写下来,就可以了。

    1. 会天阴
      会天阴 · 2021-09-03 16:54

      大佬有具体教程嘛

      1. B1ue1nWh1te
        B1ue1nWh1te · 2021-09-03 20:51 作者

        emm没有唉,主要是因为现在基本上已经结束了,这个脚本不维护了,建议手动刷了。

  2. 123
    123 · 2021-08-23 16:02

    我问下作者的现在还能用吗

    1. B1ue1nWh1te
      B1ue1nWh1te · 2021-08-23 18:31 作者

      我的能用,之前用过的人都能用,但奇怪的是后来的人就用不上了不知道为啥

  3. 123
    123 · 2021-08-23 15:13

    有大佬解决了吗

  4. 123
    123 · 2021-08-23 14:50

    我的也是这个情况 你们的解决了吗

    1. B1ue1nWh1te
      B1ue1nWh1te · 2021-08-23 15:41 作者

      之前都能很好运行的,可能后来加了些什么限制吧

      1. 123
        123 · 2021-08-23 16:44

        这个是电脑原因 还是手机用户问题

  5. zhez
    zhez · 2021-08-09 17:39

    dalao,我也有如上的问题

    1. B1ue1nWh1te
      B1ue1nWh1te · 2021-08-09 18:08 作者

      Emm,很奇怪,我刚才又运行了一次,我这边都是正常状态的。那个报错是因为读取用户数据的时候读不到才有的,我没有办法复现这个错误,所以不能改,目前比较好的方法是尝试让能正常使用的人帮你跑脚本。

  6. ddd
    ddd · 2021-08-03 15:45

    File "FinishSecurityCourse.py", line 195, in
    Login()
    File "FinishSecurityCourse.py", line 58, in Login
    userProjectId = data["normalUserProjectId"]
    KeyError: 'normalUserProjectId'

    出现这个咋整

    1. jjj
      jjj · 2021-08-15 22:07

      我也是这个问题

    2. B1ue1nWh1te
      B1ue1nWh1te · 2021-08-03 16:18 作者

      这个情况我尚未遇到过,可能是扫码接口出错导致的。我刚才测试了一下可以正常登录,建议多次尝试登录。

      1. ddd
        ddd · 2021-08-03 17:24

        我刚刚两台电脑都试了,还用了两部手机扫。都是一样的结果,不知道是出啥bug了

        1. B1ue1nWh1te
          B1ue1nWh1te · 2021-08-03 22:28 作者

          不清楚唉,目前只有你出现了这种情况,其他人都能正常使用的。学号什么的有正常绑定吗,初始化考试有做吗

          1. 会天阴
            会天阴 · 2021-09-03 16:52

            我也遇到了这个问题

发表留言


知 乎 推 特 QQ Mail Github Xayah 贰猹的小窝 St.Lee