学校抢课软件
起因,西电第一轮抢课总是会掉一些课,所以做了一个抢课软件,当时是把所有的课都抢到手然后再把不喜欢的课退掉了。现在我学分基本抢够了,就打算把这个软件开源了,其实这个软件很简单,也就提前花了30分钟写完,然后放出10个软件对空余名额进行锁定。
欢迎来我网站,审核不通过的文章将会发到私人博客上:www.xuanworld.top
欢迎一起来薅学校羊毛,我其实做过很多针对学校的事情,那些软件看情况再开源。
一、软件介绍
本软件使用python脚本编写,python解释器版本为3.9,程序在运行之后会开始对选定科目循环发出选课请求,如果有名额空出,选课系统则会接受软件发出的请求,然后成功选上课,本软件选课成功率不能保证100%,有可能会没有人退课导致名额无法空出,但是本人在使用的时候发现会有人在凌晨进行换课,这时候软件则可能抢到空出的名额。西电选课的后台是真的一点防备都没有,连验证码都没有,也没有实时变化的数据,是故意让我来抢课的吗(笑)
二、软件使用方法
首先需要用到网络抓包,获取到选课时客户端发出的请求,西电的话会有选课的clazzType,clazzId,secretVal,secretVal我发现这个东西竟然不是实时变化的。然后还有你的cookie,获取到这些东西后将其粘贴到代码中的相应部分。然后在Linux服务器上运行下行代码。
1
| nohup python3 qiangke.py > qiangke.log 2>&1 &
|
然后就会进入循环抢课阶段
可以通过观察qiangke.py的log来进行观察是否抢课成功,如果成功会显示
1 2 3 4 5
| { "code":200, "msg":"操作成功", "data":null }
|
三、软件源代码
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
| 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位置。(因为我服务器内存大,使用就懒得再改)
1 2 3 4
| while code == 500: r = requests.post(upload_url, headers=information, data=data) code=r.json()['code'] print(r.text)
|