天平教务 调查|谁抢了我的课

原创 北大青年 北大青年

全文5507字,阅读约需9分钟。
本报采访人员
李润泽经济大学2018级本科生
姜贤昱 社会学系2018级本科生
王,外国语学院2019级本科生
凌晨1点,手机闹钟唤醒了趴在桌子上的晏安。浏览器已帮他自动填入密码,他迅速按下了选课系统的登录按钮。浏览器弹出提示:“正在登录…”。他憋住一口气,准备好看到空余名额后立即输入验证码补选。可惜期待落空,这门课仍是选满的状态。
延安这次放弃了英语课。他决定熬夜补考,因为他听说选课网会在晚上发布课程数量。当时他不会想到这也是一个补选的课程,有人只需要配置一个程序,然后输入指令运行,然后就可以放心睡觉了。补选的所有操作将由程序自动完成。
在校内,这种程序被称为:刷课机。

△根据322份问卷调查结果,问卷发放给北京大学本科生
选课网与刷课机
“刷机一般是指通过模拟用户操作,不断选择课程,从而尝试选择某一门课程的程序。”这是MediaWiki平台开发者亨利在2012年对刷机的定义。
2007年,根据教务部的要求,计算中心开始承担选课系统的开发工作。当时的选课流程与现在并无二致,均包括预选、抽签、补退选、补选四个阶段,2016年起补退选中增加了跨院系选课阶段。学生在预选阶段将目标课程加入列表,并在不同的课程间分配总和为99的“意愿点”,以提高抽签选中概率。补退选阶段,学生自由选课或退课,多人抢同一节课时先到先得。

△旧版本选课网络预选界面
在补退选阶段,对于手动选课者,先到先得的方法保证了公平,但操作费时费力。选课者需要不断刷新页面,查看待选课程有无空余名额。简单的重复过程正适合用程序执行,据计算中心应用二室主任来天平回忆,刷课机在选课网投入使用的时候就出现了。
虽然最早的程序没有经过验证,但是刷类机的工作原理基本相同。萧百图是开源平台GitHub上的一个类刷机项目PKUAutoElective的作者。他说:刷课机的核心是程序自动刷新界面,一旦发现要选择的班级超过空个名额,就会立即选择。
此外,为了模拟人的行为,刷课机还要设置刷新间隔,在每次刷新之间进行短暂的停止。实际暂停时间围绕设定值上下浮动,主要取决于偏移量的大小。这些设置一般采用默认参数,但也允许用户自行修改。
在原有的选课系统中,补选过程中不需要输入验证码,因此开发刷课机非常困难。为了限制刷课机的使用,计算中心在这个阶段增加了一个验证码,要求学生输入验证码后才能进行补选操作。起初验证码的模式比较简单,但后来计算中心增加了复杂度,要求区分大小写,形成了现在的验证码形式。
但增设验证码的作用有限,“人工填写验证码、程序自动刷课”的方式让刷课机避开了识别验证码的过程。“PKU选课助手”是基于JavaScript语言编写的Chrome浏览器插件,能够在用户自己输入验证码后自动刷新意向课程,发现有空余名额后立即选课。该插件曾在Chrome网上应用商店发行,但于2019年1月下架。

△PKU选课辅助界面
萧柏途表示,早在2016年前后,浏览器的选课插件就已经在GitHub上开源了。当时他认为这个插件不够智能,仍然要靠手动输入验证码,因而产生了开发一个“全自动”刷课机的想法。
2019年2月,萧百图在GitHub上开设了pkuautautical。程序基于Python编写,无需任何人工操作,即可自动完成从登录系统、填写验证码、反复刷新、选择目标课程的所有步骤。他为此专门开发了验证码识别模块,使得识别准确率达到95.6%。

推荐阅读