如何从教务系统抢到课

首页 | 最后更新时间: 2018-02-13 | 作者: AberSheeran | 捐助

又到了一学期一次的抢课时节,由于我校规定必须在四个分类下各修一门选修课,所以不用上课不用课本的网课往往供不应求。而有趣的是,在选课时间是整整一天。也就是说,这期间拥有已经修过的分类下的网课的人可以找别人进行换课。这让网课更加供不应求。

作为一个码农,我当然不会去手动抢课。再说了,学校那个垃圾教务系统设计,刷不刷得进去全靠运气,并发支持不过百。我一个非酋不跟欧皇比运气。

Hacking

查看学校选课页面的Js代码,在一堆前端验证+拼音缩写之中找到了这个

 function save(xkkh)
 {
  $.ajax({
    url:'/xk/xxk/savexxk?action=ok',
    dataType:'json',
    data:{'xkkh':xkkh},
    type:'POST',
    success: function(data){
      alert(data.msg);
      location.reload();
      }
    });
 }

 function delxkkh(xkkh)
 {
  $.ajax({
    url:'/xk/xxk/delxxk?action=ok',
    dataType:'json',
    data:{'xkkh':xkkh},
    type:'POST',
    success: function(data){
      alert(data.msg);
      location.reload();
      }
    });
 }

结合页面内其他Js代码,我大致理解了学校的这个选课页面代码的逻辑如下:

检查完课程的剩余量之后,将{"xkkh": lesson_coding}这样的json信息发送到对应网址来选课。

但由于选课没有开始,我并不能看到选课按钮会实际执行什么代码(没错,选课不开始,就没有选课按钮)。
第二天一看,我的思路没问题,但lesson_coding不是显示在页面源码的coding,而是在页面源码的coding基础上,在代表学年学期的字符串上加一个括号!

也就是说,通过审查元素你可能会看到这样的2017-2018-1-07492110-0101224-1。但你应该发到教务系统的应该是(2017-2018-1)-07492110-0101224-1

小小的修改之后,成功抢到了两门网课(当然是截胡了别人的交易)。脚本见Github

最后......隔壁的欧皇凭运气一开局就抢到了两门网课!我***


时过经年,学弟找我要脚本,而原来的脚本已经失效。我也懒怠去破解验证码,他一语惊醒我。如果只是给自己选课不一定要自己写代码,完全可以在页面里执行JS代码。

例如我想抢课程代码为2017-2018-1-07492110-0101224-1的课,我只需要打开浏览器的控制台,在里面执行

setInterval(function(){
    $.ajax({
      url:'/xk/xxk/savexxk?action=ok',
      dataType:'json',
      data:{'xkkh': "(2017-2018-1)-07492110-0101224-1"},
      type:'POST',
      success: function(data){
        if (data.msg=="选课成功!") {
          alert(data.msg);
        }
      }
    });
}, 1000)

然后等着选课成功就好。

标签: Python
收录于#校园时光