python实现强智科技教务系统抢课(两种方法)
前言
又到了选课的时间,又一次被教务系统的预选给安排了,硬是一门都没选中。于是想实现有没有自动捡课的方法。就整体分为两种方法,一种是获取get请求然后由python多线程提交去选课,一种是利用自动化测试的selenium库去调用谷歌浏览器模拟人工选课操作。其实就算都是强智系统,但细节上还是有些差别的。所以也有可能无法实现。这里放出两种方法的代码和流程,仅供参考。
方法一:
直接提交选课的数据包(需要cookie和课程ID),先用同学的账号登录教务系统,进入到选课的地方,打开浏览器的开发模式(按F12),点击Network()我这里是谷歌浏览器,如果是其他的找到网络抓包即可。
点击你想选择课程的选课按钮,得到我们需要的数据包。
我们来看下这个数据包的内容,我们需要找到cookie( 你的身份标识),以及我们需要选的课程ID,然后用python模拟提交就OK了。
注意 代码里的User_Agent和Referer也要记得修改,都在数据包里。
下面是代码:
import requests
from future.backports.test.ssl_servers import threading
# 获取cookie 和 课程id就可以抢课
def qian1():
data = 201820192001656
# data 是找到的课程ID,因为python没学好,代码写的有点乱
# 下面是地址 就是我们抓到的那个数据包的URL
url = http://****(学校的地址).edu.cn/jsxsd/xsxkkc/bxxkOper?jx0404id=+str(data)
cookie = 用找到的cookie替换
header = {
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36,
Referer: http://........../srun_portal_pc.php?ac_id=1,
cookie:cookie
}
# 一直抢!
while True:
# 设定5s服务器未应答就放弃这次,鬼知道是服务器炸了还是。。。。
mes = requests.get(url, headers=header, timeout=5)
# 打印返回的结果,就是弹出来的那个小窗口的内容
print(str(1)+str(mes.status_code)+:+str(mes.text))
# 后面是不同的课,因为不能吊在一课树上!
def qian():
data = 201820192001302
url = http://*****/jsxsd/xsxkkc/bxxkOper?jx0404id=+str(data)
cookie = *****cookie
header = {
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36,
Referer: http://172.30.1.70/srun_portal_pc.php?ac_id=1,
cookie:cookie
}
while True:
mes = requests.get(url, headers=header, timeout=5)
print(str(0)+str(mes.status_code)+:+str(mes.text))
def qian2():
data = 201820192001155
url = http://****n/jsxsd/xsxkkc/bxxkOper?jx0404id= + str(data)
cookie = cookie
header = {
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36,
Referer: http://172.30.1.70/srun_portal_pc.php?ac_id=1,
cookie: cookie
}
while True:
mes = requests.get(url, headers=header, timeout=5)
print(str(2)+str(mes.status_code) + : + str(mes.text))
def main():
# 开多线程分开抢课
# 接下来就会一直抢课!
thread1 = threading.Thread(target=qian)
thread2 = threading.Thread(target=qian1)
thread3 = threading.Thread(target=qian2)
thread4 = threading.Thread(target=qian)
thread5 = threading.Thread(target=qian1)
thread6 = threading.Thread(target=qian2)
thread1.start()
thread2.start()
thread3.start()
thread4.start()
thread5.start()
thread6.start()
main()
方法二:selenium库模拟人工选课
要使用这个方法之前,最好先看一下这一篇文章,。记得提前安装好selenium库,以及Chromedriver。具体方法可以在搜索。
使用流程
- 将脚本内信息填好改好
- 运行脚本,此时会打开chrome并且打开登录页,脚本会自行填写学号密码,需要等你填写验证码
