|
打开Tampermonkey的油猴脚本列表,我数了数,脚本光是刷网标着“网课助手”字样的脚本就有七个。装过其中三个,油猴删了两个,脚本留下一个改过代码的刷网版本。这事没那么复杂,油猴也没那么道德败坏——至少在我看来,脚本它跟用快捷键跳过片头广告是刷网一个性质。 2020年春天,油猴我帮表弟挂过一门《大学生心理健康》。脚本他报了六门网课,刷网其中四门需要看完视频才算平时成绩。油猴那会儿他刚找了个实习,脚本白天在工位上一坐就是刷网十小时,晚上回来倒头就睡。视频还在播,人已经睡着了。脚本就是在这种缝隙里长出来的。 原理简单得让人失望。网课平台靠什么判断你在看?无非是页面焦点、鼠标移动、播放进度、答题弹窗这几样。油猴脚本干的事,就是伪造这些信号。`document.hasFocus()`永远返回true,鼠标每隔几秒自动挪几个像素,视频倍速拉到16倍但上报给服务器的播放速度还是1.0。至于弹窗题目,脚本内置一个题库匹配,匹配不到就随机选,正确率大概七成。有些脚本更粗暴,直接拦截XHR请求,把“已完成”的状态码提前发给服务器。 我见过一个写得最优雅的版本,作者在GitHub上开源了。他在代码注释里写:“本脚本仅供学习JavaScript事件模拟使用,请于下载后24小时内删除。”然后下一行就是`video.playbackRate = 16`。这种欲盖弥彰的幽默感,在脚本圈里挺常见。 平台那边不是没反应。超星学习通前两年更新过检测逻辑,把`visibilitychange`事件和播放器的`timeupdate`做了交叉验证。结果脚本作者们三天内就出了补丁——用`Object.defineProperty`重写了`document.visibilityState`的getter。这场猫鼠游戏里,平台永远慢半拍,因为写脚本的人里,不少就是被网课折磨过的在校生。 说回我表弟。他那门心理健康最后考了87分,视频进度100%,章节测验平均分91。他连教材长什么样都不知道。我问他心虚吗,他说:“这门课教的东西,我初中就懂了。它唯一的作用是让我没法去实习。” 我自己的态度有点分裂。一方面,我知道刷课是在消解教育的严肃性——如果连看视频都能自动化,那这门课存在的意义是什么?另一方面,当一门课的质量低到只剩下“看视频”这个动作时,用脚本跳过它,几乎是一种理性的时间管理。真正的问题不在脚本,在于为什么会有这么多只需挂机就能通过的课。 前几天那个脚本更新了,新增了一个功能:自动填写课后讨论。它从预设的语料库里随机抽一段话,稍作修改就提交。我盯着那个“发布”按钮看了很久,最后没点。有些事让机器代劳,心里过得去;有些事,还是得自己来。 脚本还在跑。视频进度条以肉眼可见的速度往前爬,像一条不需要喂食的电子宠物。我关掉浏览器,去厨房煮了碗面。回来的时候,那门课已经显示“已完成”。 |