前言
刚到中午13:00
便是学校内数以万计的人开始准备抢课,这让第一次抢课的我显得有些手足无措,在其他同学的猛烈攻势下,网课瞬间被掏空了,随即便是那些性价比较高的学科。而我只能当一个🐀人,捡剩下没人要的课程。一番折腾下来只拿到了高数进阶与数学建模…让本来是学工科的我,又多了一些工科…为了改变两个都是工科的现状,我决定用自动化脚本进行捡漏,抢课?都没课了只能捡漏,打算~~(偷交易课程人的屁股)~~顺便实践一下学习的requests
库的使用。于是在得到学长前代的捡漏脚本后对其进行了部分升级。
代码实现
在升级之前,我们可以得知网页选课都是发送请求包给后台,后台判定人是否已经满了,之后再决定你是否选课成功。
对此我们则使用requests
对学校网页端请求得到其对应的Html
代码,之后再使用正则表达式找到对应关键部分,进行搜索,判断哪些课程可以捡漏,之后发送对应的请求包,完成此次捡漏~~(偷屁股)~~的工作。
实现代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| import requests import re import time from concurrent.futures import ThreadPoolExecutor
def PD(id, co, pd): url = "XXX" + pd op = { "optype": "true", "operator0": id + ":true:0", "lesson0": id, "schLessonGroup_" + id: "undefined" } headers = { "cookie": co, "X-Requested-With": "XMLHttpRequest", "Referer": "XXX" + pd, "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.0 Safari/537.36 Edg/84.0.521.0" }
res = requests.post(url=url, headers=headers, data=op, timeout=5, allow_redirects=False)
ret = re.search(r"margin:auto;\">\n\t\t\t\t(.*)<\/br>", res.text)
if "请不要过快点击" in res.text: print("Too Fast") else: print(ret.group(1))
if __name__ == '__main__': co = input("cookie?") id = ['74017'] pd = '3016'
with ThreadPoolExecutor(50) as t: for i in range(100): t.submit(PD, id=id, co=co, pd=pd) time.sleep(1)
|
由于不会验证码绕过的菜鸡,只能自己手动抓取Cookie
输入来对其发起Post
请求,达到绕过登录的问题。同时加入了线程池,实现对该线程循环请求。(实际上还是单线程,任务链接只有一个)