前言

大家好,3年前,我是在大一的时候就写过一个讲课脚本,并且成功抢到了选修课。

这是3年前的文章。如何实现简单的脚本来抢课

时间飞逝挺快的,从大一到大四我学了很多的计算机知识,努力学习,并且最终保研上了北大

这3年也有网友陆陆续续找到我,希望我能给他抢课或者说是咨询抢课脚本怎么写。之前是时间精力有限,现在我有时间能够回答抢课方面一些事,希望彻底解决大学生抢课方面的疑惑。

在这里插入图片描述

区分抢课和捡漏

首先要区分抢课捡漏

在抢课阶段,往往是系统非常的卡,挤不进去,最终导致没有课可以选。

捡漏的话,是别人退掉不想要的课,然后我们拼手速来抢到他们退掉的课。

捡漏的时间是远大于抢课的,首先来说抢课。

在这里插入图片描述

抢课成功的原理

现在确实是能够通过技术手段抢到课的,那么是怎么实现的?

首先选课的流程分为这几步:

  1. 浏览器加载出一堆可以选的课的列表
    img

  2. 点击选课

  3. 服务器接收到学生的选课请求
    image-20230104212858994

  4. 最后服务器处理学生请求后,选课就结束了,之后我们不再关心

选课,我们是不是卡在第一步,界面怎么都加载不出来。更不要说点击按钮了。

但是抢课的话,可以绕过第一步,第二步,直接跳到第三步,向服务器发送请求。

举个例子,假如说12点整选课系统开放,那么12点整这时候服务器是能够接收选课请求的。

绝大数学生同时进入第一步的时候,系统受不了,处理不过来就导致我们非常慢。就算很快的同学也是12点过几秒才进去是吧,进去后还要点击对应课程选课按钮是吧,才会向服务器发送选课请求。

但是抢课的同学,12点整就直接向服务器发送选课的请求了,比最先加载出界面的同学还要更快。所以他们就能够最先选到课。

image-20230104214900404

那么问题来了,向服务器发送的请求是什么,为什么能让抢课的同学选到课?

在这里插入图片描述

抢课的关键,构造选课请求

选课的请求里面携带的信息有,学生的详细信息,以及课程的信息。发给服务器后,这样就相当于就告诉了服务器,哪个学生选了什么课。

举个例子,一个学生的学号是201911020127,一个选修课的课程编号是56,这样服务器系统就会知道,学号为201911020127的学生选了选课修编号为56,然后存入数据库,然后返回给你说,选课成功。

下一个问题又来了,抢课的同学是怎么知道系统记录关于自己的详细信息,以及课程信息的呢?

答:通过抓包

简单来说,就是事先就要能够发送一次请求,需要通过拦截工具拦截后,提取里面的关键信息(包括学生信息,课程编号等等)。下次就能够自己构造一摸一样的请求,发送给服务器。

这样抢课的周期可以说必须跨越两次选课,也就是隔半年。一般情况没有哪个写抢课的技术人员,会愿意第一次选课帮助你努力研究后,半年后再继续实施抢课(除开自己给自己抢课,或者说不同学校使用一样选课系统的等等情况,很复杂)

image-20230104234920547

复杂一点的话,我就不多深究了,下面是我一遍用fiddler抓包的界面,对非计算机专业学生要学的东西多一点。

img

所以说,一般抢课的就是技术人员,都是通过捡漏来选到你想要的课。

我讲明白了吧o( ̄▽ ̄)ブ

在这里插入图片描述

如何进行高效的捡漏

捡漏,就是要通过不断的刷新,凭运气出现你想要的课后,和其他同学来拼手速来抢它。也就是我们说的选课第二步

image-20230105000253927

要成功捡漏了话有两种方式:

  1. 用脚本加快手速
    这种方式是我三年前那篇文章使用到的,用java写的,其实非计算机专业学生也可以通过按键精灵等软件来实现,不断点击刷新和选课的两个位置。
    当然,这样抢的课是随机的。

  2. 用脚本频繁发送请求(抢课中提到的请求)

    这样就能针对具体的课进行捡漏,实用性高一些,选课成功的概率也低一些,更需要看别的同学释不释放这个课程。

这不巧了,捡漏的话,我们可以绕过第二步,不断进行第三步,向服务器发送信息。

一旦其他同学释放掉课后,我们由于不断发送选课的请求,会有更大的几率被服务器接收,只要课程满人了,其他人发送的请求就失效了。画个简图,很容易理解。

image-20230105001139023

我的建议

针对计算机专业学生

如果你想要自己写脚本的话,可以学python,或者java都是可以的。当你学了一段时间后,你自己会悟出来,怎么来写一个控制鼠标键盘的脚本。

如果你想要抢课的话,我建议是学习爬虫,爬虫会让你明白客户端和服务器之间是怎么进行请求的,学了一段时候后你就能够自己构造请求了,当然构造抢课的请求也不在话下。

零基础学习的周期会比较长,要有一个心理准备,一般基础语言学完的话要2-3个月,爬虫学一点的话要1个月。这些肯定都是要建立在实操的基础上。

针对非计算机专业的学生

不要自己去学习写脚本,周期会很长。

建议直接去网上找专门抢课的人员,肯定会有的。我周围就有专门给别人抢课的大学生,实在不行去淘宝、去咸鱼上、去公众号上都找找,有贵的也有便宜的。

在这里插入图片描述

最后,我是写过很多爬虫的计算机专业学生,但很久没有写过抢课脚本了。如果有问题的话,欢迎来我的公众号联系我,我会尽力解答。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐