大学生抢课技巧

  1. 1. 写在前言以前
  2. 2. 前言
  3. 3. Cookies
  4. 4. 方法一,程序再现法:
    1. 4.1. 抓包
    2. 4.2. 伪造请求
    3. 4.3. 抢课请求
  5. 5. 方法二,cmd循环法:
  6. 6. 方法三,模拟点击法:

写在前言以前

都是大学生了,多准备几个设备不行吗?结果,我几个设备都一起白屏了。

后面痛定思痛,研究了几个比较容易实现的抢课手段。

复杂的放在前面,简单的放在了后面了。

好了好了,这篇就是帮助各位新大学生掌握一些基础的技巧,不被校园网还有已经是老油条的学长们狠狠上一课。

前言

在读这篇博客之前,你需要一点点Python语法基础,这样子你才能看得明白一点。

如果你曾经看过我前面发的Python爬虫基础或者已经对这玩意有了解的话,那就再好不过了。

不然不打算细细看代码还有Python的话,可以直奔本篇的方法二和方法三了。

注意,因为本篇涉及爬虫,注意事项在这里重申一次

注意事项
  1. 重新访问策略

网站的属性之一就是经常动态变化,而爬取网站的一小部分往往需要花费几个星期或者几个月。等到网站爬虫完成它的爬取,很多事件也已经发生了,包括增加、更新和删除。 这时候又需要重新获取,十分浪费。做好计划才是重中之重。

  1. 平衡礼貌策略
    爬虫相比于人,可以有更快的检索速度和更深的层次,所以,他们可能使一个站点瘫痪。不需要说一个单独的爬虫一秒钟要执行多条请求,下载大的文件。一个服务器也会很难响应多线程爬虫的请求。

不要设置过高访问速率
不要利用网站漏洞
不要访问禁止的资源
不要访问版权保护资源
尊重个人隐私

对这些问题的局部解决方法是漫游器排除协议(Robots exclusion protocol),也被称为robots.txt议定书,这份协议是让管理员指明网络服务器的不应该爬取的约定。这个标准没有包括重新访问一台服务器的间隔的建议,虽然设置访问间隔是避免服务器超载的最有效办法。在主域名后面接robots.txt就可以访问到服务器不希望爬虫访问的内容。例如:https://www.bilibili.com/robots.txt本博客的

Cookies

因为web请求的每一次都是独立的,跟之前的请求并没有任何协议或者规则上面的关联。这句导致你登录了,然后刷新一次可能就导致你登录退出了。

而且浏览某些购物网站也是,用户浏览了几个页面,买了什么东西,结果在最后结帐时,服务器并不知道用户到底买了什么。这怎么行?

所以前人想出了一个办法:你在浏览东西购买的东西都保存起来,在你提交付款的 时候,把你浏览过,想要买的东西一起发送过去,这样子服务器就知道你要买什么了,当然登录也是一样。

方法一,程序再现法:

抓包

这一步很重要,首先在一个新标签页打开Inspect(一般来说是按下浏览器的 F12 )

类似于右边这个界面,有时候你的页面会在下面,左边的,这些都无关紧要,我们把上面的标签切换到网络(network)进行接下来操作。

接下来我们输入你们学校的抢课网址,观察右边出现了什么请求。

通常来说会有验证码之类的东西在里面,找到他的链接就行。

如果你的没有验证码,那接下来就好办了,只需要在把右边清空后然后输入你的用户名和密码登录,接下来会出现登录请求。

找到把你用户名和密码送过去的请求,一般只能一个个找,而且这个请求一般是最上面的一两个。

伪造请求

这样子经过多几次请求,观察每个数据的关系,是用什么方法加密的,要送什么数据过去,这样子你就会在你的程序上面伪造一个请求。

如果你是在分析不出来,可以将每次请求都不变的数据直接送过去即可。变化的数据也可以试试,如果成功了那就是能用,毕竟做系统的人可能也会有疏漏。

你的程序可以模仿上面那个方法,这样子就可以实现登录。

不过,你也可以跳过这个方法,我上面已经说过了,如果没有Cookies的话,网站甚至记不住你已经登录了。你可以直接从普通浏览器请求登录拿到Cookies然后直接写进你的程序里面。

你可以从这里获取Cookies,然后将Cookies的值附带在标头的变量里面一起送给服务器。

观察网站如何维持SESSION

一般来说只要维持cookie不被清除或者过期即可,有时候服务器会返回一个token给你,或者说一个临时登录参数,观察以后请求的地址是否有固定跟着一个参数,如果有,试试把它删除掉,看是否还能正常登录,如果不能登录,证明这个参数也是你登录必须的,下次请求一定要带上。

抢课请求

接下来就是分析抢课时候发送的参数了,惯例将右边的Inspect清屏后,点击抢课按钮,右边会出现对应的请求,你需要找到对应的请求,一般是POST请求。

然后就是观察这个请求发送了哪些数据,一般是课程的编码或者代号。

接下来就是在登录之后带着cookie一起批量伪造选课请求就行了。

至于返回的请求,就留给各位自己探索了。

方法二,cmd循环法:

在你找到的对应选课请求上面可以按下右键直接复制对应的执行脚本,然后在桌面写个脚本就可以将代码循环执行。

方法三,模拟点击法:

这个是最简单的方法,前提是

  1. 在选课人数已满的情况下还可以点击选课按钮
  2. 在上面的条件下能通过点击选课按钮向服务器发出选课请求
  3. 在上面的条件下,是由服务器来告诉你已满
  4. 选课和取消选课按钮ID不一致

上面条件缺一不可。

首先在选课的按钮上面点击右键检查该按钮的代码。

接下来在代码里面找到该按钮的ID,也可以找其他的属性,只需要将下面的 JS 代码改一下即可。

1
setInterval(function(){ document.getElementById('在这里填写按钮ID').click(); }, 1000);

如果会跳出提示框,只需要将提示框的确认或者取消的按钮 ID 填进去,然后用两条语句执行即可。

后面的1000是延迟时间,每隔多少微妙点击一次该按钮。

接下来就是将你改好的 JS 代码放进控制台里面执行即可。

这里还有好几个其他的方法,一起放出来了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
有几种方法可以实现网页控制台一行代码实现按钮反复点击,例如:

使用setInterval函数和jQuery的.click方法,
如:setInterval(function(){$("#button").click()},1000);
这样就可以每隔一秒钟自动点击id为button的按钮。


使用location.href属性和锚点定位,
如:location.href="#button";document.getElementById("button").click();
这样就可以跳转到id为button的按钮并点击它。


使用模拟鼠标事件的方法,
如:var event = new MouseEvent("click");document.getElementById("button").dispatchEvent(event);
这样就可以触发id为button的按钮的点击事件。

那么到这里,恭喜你已经成为一个没那么新手的新手了

召唤伊斯特瓦尔