在线学习网站刷课时的几种方式

324 阅读3分钟

一. 查看上报学习时间的逻辑

这里一般会分为好几种情况

1.播放完毕、暂停、退出后自动上报 后端无校验
2. 播放开始,完毕、暂停、退出后自动上报 后端有校验,会根据开始时间和结束时间做对比,结束时间不能小于开始时间+视频时长
3.定时上报,1分钟上报一次

本人有幸这三种都遇到过。

二. 应对方法

  • 情况一:

在20年初,公司有网络安全学习需要我们学,不能拖动进度条,需要看看完,就是用的第一种,直接burp抓包,改包,三分钟完事。

  • 情况二:

    就是前几天帮我老父亲刷课时的,本来一看,没有定时上报,应该直接改包就可以,先从1,改到100,保存成功,改成200,也保存成功。
    但是,就是在 最大时间值(比如视频时长 20 分钟),我传20 * 60 * 1000, 会报错,提示不能拖动进度条,各种review前端代码,发现没什么问题,在20分钟后,上报成功,学习完成。
    这种方式需要写代码了,

    1. 获取课程列表的接口,找出未学习的课程
    2. 调用开始学习的接口,然后设置定时器,定时器的时间就是课程时长 + 2分钟
    3. 重复步骤1,2

    这里有些情况可能会登录失效,所以,根据需要刷课时的时间来看,一般几个小时的课程,cookie 啥的不会过期

  • 情况三:

    方式三最为麻烦,需要定时上报,我也是通过写代码的方式,这里推荐两个Node.js库,playwrightPuppeteer

    1. 通过代码模拟打开浏览器

    2. 打开浏览器后进入课程学习

    3. 获取dom元素,判断哪个元素还没学习

    4. 进入学习,这里有一个复杂点,判断学习完成的结束,我上一个就是使用的腾讯的sdk,找方法找了半天,感觉过于复杂,于是就选择了10分钟刷新一次页面,如果学习完毕后,返回的html是不一样的。

    5. 这个都做成定时上报了,所以肯定有失效过去的方式,大概2小时左右过期一次,于是我对程序的设定就是1小时40分钟重新执行 1,2,3,4

    我也看过有人获取视频时长,然后通过定时器轮询,1分钟上报一次,这个和情况二的代码基本一致,无非就是把循环逻辑改一下,如果获取视频学习时间和信息等方式过于麻烦,其实也可以通过上述这种模拟操作的方式来做,更简单粗暴,且可以应对所有情况。

项目代码的话就没有开源出来,有的代码里写了cookie,方式三的代码写了用户名和密码在里面。 如果有需要参考和学习的话可以留言,到时候处理一下再发也可以