大二那年我写了第一个正经的Python脚本,不是因为作业,是为了帮室友签到。
室友阿杰是条咸鱼。他每天早上起不来,第一节课永远迟到。他说老师查人靠名单念,出勤率算期末分。
我问他怎么办。他说要不你帮我签个到,我说行。
第一天手动代签。老师念阿杰名字,我答到。一次两次还行,一个学期八十节课,我做不到次次都替他喊。
后来我想到用代码解决。思路很简单,写个脚本自动发送签到请求到学校系统。学校签到用的是网页,每次课代表发个二维码,扫了跳转链接,填学号姓名就完成。
我花了两天研究那个网页。按F12看网络请求,发现签到只需要一组post数据。学号、姓名、课程ID、时间戳。没有验证码,没有随机token,整个系统脆得像纸。
我开始写第一版脚本。用requests库模拟浏览器发请求。把阿杰的学号写死在代码里,设定每周一三五早上八点二十分运行。
第一次测试是在自己电脑上。我手动跑了一遍,控制台返回200,签到成功。再去数据库查签到记录,阿杰的名字绿色对勾挂在那里。
我笑了好久。
阿杰知道后请我喝了一周奶茶。他说兄弟我能不能继续用。我说可以,但你别告诉别人。
脚本跑起来很容易。我用系统的定时任务,每天上课前五分钟执行。服务器是学校机房的一台旧电脑,我偷偷装了Python环境。
最关键的问题是别被发现。我设了随机延迟,每次签到时间在八点十五到八点二十五之间浮动。人的签到时间不可能每次都精确到同一秒。老师从来没起过疑心。
另一个坑是网络断了。有一次机房停电,脚本没跑,阿杰当天缺勤。我改了一版,加了个失败重试机制。如果第一次请求失败,等三分钟再试。三次还不行就发邮件通知我。
那个学期结束的时候,阿杰全勤。他宿舍里的人都不知道他怎么做到的。班里其他人每天踩点跑进教室满头汗,只有阿杰天天睡到自然醒。
第二学期我优化了脚本。加了多账号支持,把自己室友也放进去了。三个人,三个学号,同一门课。我写了个配置文件,像填空一样简单。室友们不知道具体怎么操作,只知道我有办法。
一年过去没人发现。这种平静后来被一件小事打破。某天辅导员突然抽查课堂出勤,拿着名单一个个对照片。我当时心跳到嗓子眼。好在那天阿杰刚好去了教室,只是迟到了十分钟。辅导员没认出哪个是替签的。
那一刻我意识到这件事迟早会翻车。不是技术问题,是人的问题。辅导员如果调出签到IP地址,会发现三个人的签到都来自同一个IP段。学校真要查,分分钟破案。
我决定收手。给室友们发了消息,说脚本不跑了,以后自己签到。阿杰问我为什么,我说你总不能四年都不上课吧。他没再说什么。
那个脚本至今还躺在我的硬盘里。有时候翻出来看看,觉得挺有意思。一个简单的自动化程序,骗过了一屋子的人。技术本身没对错,看用的人怎么想。
如果你也想写类似的东西,奉劝你别干。不是因为技术难度,是风险根本不值得。被发现就是处分,为了室友签个到搭上自己档案,不值当。想帮室友不如每天早上喊他起床,这比写代码难,但安心。
毕业那天阿杰喝醉了跟我说,谢谢你替我签了两年到。我说没事。他问那脚本还在不在。我说在。他说要是能找到工作,我请你喝酒。我说好。
然后我们都没再提这件事。