问题背景
在某教师培训平台上刷网课,之前破解了其进度条无法拖动的限制:破解网课视频进度条无法拖动问题
但就算进度条能拖动了,还得等视频缓存后才能拖过去。有时缓存很慢,仍然比较麻烦。于是开始探索如何不再看视频,直接将状态修改为“已学完”。
思路是:找到视频播放结束的触发事件,手动模拟一个结束事件。
解决方法
以其中一页视频列表为例,其中有4个未学完的,先选择第一个视频,不用播放。
F12进入开发者模式,查看后台网页代码,看到其中有一大段内嵌的JavaScript代码。
在其中搜索“end”,找到了有意思的一段代码,命名十分规范易懂?。通过阅读前后代码,发现它就是结束事件,关键是一个jQuery的$.get方法:
function endedHandler() {isPlay = false;$.get('index.php?course-app-course-endstatus&type=video&courseid=2351&score=0.5&csid=13&'+Math.random());}
复制这段代码(注意其中courseid=2351
字段可能不同,需要修改为具体视频对应的id):
$.get('index.php?course-app-course-endstatus&type=video&courseid=2351&score=0.5&csid=13&'+Math.random());
到console中执行:
对每个未学完视频都进行如上操作(使用同一条指令,只需修改courseid),再刷新列表,发现视频学习状态已变成“已学完”:
操作步骤
- 打开网课视频学习页面,选择某个视频。
- 按F12进入开发者模式,打开Elements标签,CTRL-F查找“ended”定位到结束代码(这个关键字仅适用于本文破解的网站)。
- 复制其中关键代码:
$.get('index.php?course-app-course-endstatus&type=video&courseid=2351&score=0.5&csid=13&'+Math.random());
到console中执行。 - 选择下一个视频,重复步骤2和3(每次只需更改指令中的courseid=XXX即可)。
结论
通过查看后台代码,找到了网课视频学习结束的触发事件代码。在console中复制执行这段代码,即实现了“学习结束”事件的模拟。
形象来讲,我告诉它学完了,它就信以为真了。