西电抢课软件

西电抢课软件

​ 起因,西电第一轮抢课总是会掉一些课,所以做了一个抢课软件,当时是把所有的课都抢到手然后再把不喜欢的课退掉了。现在我学分基本抢够了,就打算把这个软件开源了,其实这个软件很简单,也就提前花了30分钟写完,然后放出10个软件对空余名额进行锁定。

欢迎来我网站,审核不通过的文章将会发到私人博客上:www.xuanworld.top

欢迎一起来薅学校羊毛,我其实做过很多针对学校的事情,那些软件看情况再开源。

一、软件介绍

​ 本软件使用python脚本编写,python解释器版本为3.9,程序在运行之后会开始对选定科目循环发出选课请求,如果有名额空出,选课系统则会接受软件发出的请求,然后成功选上课,本软件选课成功率不能保证100%,有可能会没有人退课导致名额无法空出,但是本人在使用的时候发现会有人在凌晨进行换课,这时候软件则可能抢到空出的名额。西电选课的后台是真的一点防备都没有,连验证码都没有,也没有实时变化的数据,是故意让我来抢课的吗(笑)

二、软件使用方法

​ 首先需要用到网络抓包,获取到选课时客户端发出的请求,西电的话会有选课的clazzType,clazzId,secretVal,secretVal我发现这个东西竟然不是实时变化的。然后还有你的cookie,获取到这些东西后将其粘贴到代码中的相应部分。然后在Linux服务器上运行下行代码。

nohup python3 -u qiangke.py > qiangke.log 2>&1 &

然后就会进入循环抢课阶段

可以通过观察qiangke.py的log来进行观察是否抢课成功,如果成功会显示

{
    "code":200,
    "msg":"操作成功",
    "data":null
}

三、软件源代码

import requests

information = {
    "Accept": "application/json, text/plain, */*",
    "Accept-Encoding": "gzip, deflate, br",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Authorization": "eyJhbGciOiJIUzUxMiJ9.eyJ0aW1lIjoxNjYxNDE5MTAyNDA5LCJsb2dpbl91c2VyX2tleSI6IjIwMDA5MjAwNTkyIiwidG9rZW4iOiJ0ZzdkNWUyNGlvamphcDgzaHNnYjVsaTlvayJ9.s2zUgYPSy0W5cU2MF_KdM0c8zvyTDpKxwgu6Viyz9E0iAbG8XxS5k2V05Pvubq_Sf_OCIVAVDZY8KEU_-v58Xw",
    "batchId": "5ed2a2e6bb97425b8ae7d8ce138283b5",
    "Connection": "keep-alive",
    "Content-Length": "237",
    "Content-Type": "application/x-www-form-urlencoded",
    "Cookie": "你的cookie",
    "Host": "xk.xidian.edu.cn",
    "Origin": "https://xk.xidian.edu.cn",
    "Referer": "https://xk.xidian.edu.cn/xsxk/elective/grablessons?batchId=5ed2a2e6bb97425b8ae7d8ce138283b5",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
}
upload_url = "https://xk.xidian.edu.cn/xsxk/elective/clazz/add"
data = {
    "clazzType": "哈",
    "clazzId": "哈哈",
    "secretVal": "哈哈哈"
}
code=500
while code == 500:
    r = requests.post(upload_url, headers=information, data=data)
    code=r.json()['code']
    print(r.text)

四、注意事项

本软件会持续输出运行的结果,可能会产生一个特别大的日志文件,如果觉得短时间内抢不到可以把那段输出代码给删掉,不会影响最终结果,但是没法观测到有没有抢到课,或者直接改一下print位置。(因为我服务器内存大,使用就懒得再改)

while code == 500:
    r = requests.post(upload_url, headers=information, data=data)
    code=r.json()['code']
print(r.text)

你可能感兴趣的:(网络技术,python,开发语言)