前言

我们每年都会有公需课学习任务,就跟上网课差不多,但不是直播,而是点播。首先,得承认公需课课程里确实有一些优秀的资源,但是对于基层的工作者来说,花费数十个小时去学那些跟自己工作关联不大的课程确实又是一种负担。

教书的能用得上哪些呢

在第一二年学的时候,有人分享了一种针对IE浏览器的快速学习的方法,最高5倍速,确实一定程度上减轻了负担。但是后来平台修改了规则,使用IE和Safari学习属于无效。

今年,我挂完了30个学分之,听某同事说他找别人代学,一节课的时间便搞定。于是我趁着周末,开始研究起来有没有更简便的方法。

以下方式仅是思路分享,并非鼓励有需要的人使用。

倍速学习法

虽然使用IE浏览器搭配Enounce MySpeed的方法已经被堵死,但是除了Flash,H5视频本身同样可以通过其它手段来倍速播放,无论是油猴脚本还是Chrome插件,甚至是在浏览器控制台里直接输入加速播放的代码。

我要了朋友的账号做测试,顺便帮他学了。学完30个学分我断断续续花了大半天的时间,期间因为倍速过高,导致平台页面提示:学霸君,系统检测到你的学习行为存在异常,请按要求继续完成学习,愿你学有所获——原话就是这样。如果不管弹窗的话网页不会再继续学习,当然点了多半也没用,需要重开,然后你会发现,进度开始于好久之前,也就是说倍速学习被检测之后进度无效。

测试课程倍速提示异常

我尝试着去找一个平衡,2.9-3.9倍速相对来说最稳,但并不是万无一失,开16倍速的话短时间内绝对提示异常,除非单节课程时长不到十分钟。

总结:间歇性、随机性提示异常,不太稳定。

修改js法

在网上冲浪的时候无意间发现有一种我未曾设想的道路,那就是劫持 js,修改播放器配置。分享那篇文章的大佬要下手的播放器好像是CKplayer,官方文档包括 js 里的注释都写得很清楚,所以可以直接修改配置,然后通过 Chrome 插件劫持。

但是我所使用的平台用的是Aliplayer,我去看了两遍文档,没有发现点播视频禁止拖动的相关配置。于是我联系了售后客服,对方却扔给我一个直播配置(isLive——当为真时,视频进度无法拖动),我追问之后,对方说“本地环境还是得辛苦你自己测试一下哈”,看样子从客服口中无法更简便的得到答案。

我将平台自托管的 js 文件存下来,尝试修改了几处之后,用GoRes插件将目标 js 进行替换,在控制台可以看到替换跳转成功,但是修改的无论倍速、播放初始时间都没有能够生效,播放器仍然和此前一样。

GoRes规则

这个方法理论上可行,如果确实是由 js 控制播放器,但是我却懒得去深入研究了,因为我发现了另外一个方法。

抓包改包法

在B站上有一位大佬分享了一个视频,用火狐浏览器修改一个名为writeRecordWhileClosePOST请求,将消息头里记录的进度修改为视频长度便可以达到秒学的目的。

很可惜的是,我在火狐测试的时候,这个请求通常有几百字节大小,但是在控制台里却无法看到消息头。

提示“此请求无消息头”

突然想起用火狐刷新的时候每次都会提示Error: Request aborted,但是用 Chrome就不会。于是我把浏览器的 UA 改成了谷歌浏览器的 UA,没提示了,但是这个请求仍然无法在控制台里看到消息头。

Fiddler——启动!如下图所示,可以看到该请求的消息头。

Fiddler抓包

那么,修改信息头重新提交罢!但是也不行,可能是服务器端对请求有了检测?

改包post后的反馈

我不肯死心,重新找抓到的请求,发现一个updateCourseRecord的请求,点开之后发现它的消息头和writeRecordWhileClose的相差无几,并且从字面意思来看它才也是负责上传课程记录的请求。修改——POST——成功,但也仅此一次。

后来我发现这个请求并非一直存在,只有极少数主要是在学完小节或者切换小节的时候出现。如果请求不主动出现,那我就主动去请求罢!从getStudyRecordList获取到诸如recordIdcookiescourseIdchapterId一类的数据,填充到自己构建的请求中去,执行。结果,失败了。

构造后的请求

最后,我发现writeRecordWhileCloseupdateCourseRecord其实都可以稳定提交进度,前者还不必额外获取消息头需要的信息,但是每次增加的数值超过400(大概)便会提示异常!

总结

上面提到的三种方式,最费时的当属第一种,但是它也是最简单的。如果有人值守,在弹窗后及时重新学习,半天时间肯定可以学完30学分。第二种方法理论上可行,如果平台确实是用的 js 对播放器诸如快进、倍速之类的功能做的限制,但是注释里面是不可能找到对应功能的,保存下来的 js 又乱糟糟的很大一坨,要花更多的时间去研究。第三种方法也还能用,唯一的方式就是写一个脚本,每次在writeRecordWhileClose请求记录的当前位置上增加不要太高的数值,逐次把学习时间加上去。

水这篇文章只是记录一下这个周末花时间折腾的东西,我希望有一天我可以不用折腾,要么是不用再去学习这些玩意,要么就是学习的内容真正有用的时候。