南昌大学(NCU)羽毛球场地预约脚本
在冬天进行羽毛球运动是一个很好的选择,它能帮助你保持身体活力,增强心肺功能,并促进血液循环。但是室友和师弟师妹反应,学校的羽毛球场地有限,手速慢的根本预约不到场地。
中午12:00准时开放预约,1秒钟不到,就只剩下08:00-09:00和12:00-13:00的不好的时间段,如果想要预约到晚上19:00-21:00的黄金时间段就需要用脚本了。
一、Python代码
1. 导入工具包
import requests
import time
2. 输入用户名和密码
session = requests.Session() # 用于存储 Cookie
account = ['402201314520'] # 用户名
password = ['1234567'] # 密码
time1 = time.time() # 记录初始时间
3. 场馆登入URL
for i in range(1):login_url = 'https://cas.ncu.edu.cn:8443/cas/login?service=http%3A%2F%2Fndyy.ncu.edu.cn%3A8089%2Fcas%2Flogin' # 场馆登入URLheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0'}data1 = {'name': account[i], 'pwd': password[i], } # 可用于多个账号的预约login = session.get(login_url, headers=headers, data=data1) # 登入操作print(login)# print(login.text) # 打印是否登入成功
4. 预约
t = 1 # 用于12:00前的不断刷新预约界面while t == 1:try:for j in range(2): # 预约次数,即几个时间段'''url1 中的参数role=ROLE_STUDENT # 表示学生身份date=2024-12-03 # 预约日期startTime=08:00-09 # 预约时间areaName=%E7%BE%BD%E6%AF%9B%E7%90%8312%E5%8F%B7%E5%9C%BA%E5%9C%B0 # “羽毛球12号场地”这几个中文的URL编码 其实不同场地也就是 %8312% 不同,如: %831% 表示 “羽毛球1号场地”areaNickname=hall12 # “羽毛球12号场地” 的英文名称'''url1 = ['https://ndyy.ncu.edu.cn/api/badminton/saveReservationInformation?role=ROLE_STUDENT&date=2024-12-03&startTime=08:00-09:00&areaName=%E7%BE%BD%E6%AF%9B%E7%90%8312%E5%8F%B7%E5%9C%BA%E5%9C%B0&areaNickname=hall12','https://ndyy.ncu.edu.cn/api/badminton/saveReservationInformation?role=ROLE_STUDENT&date=2024-12-04&startTime=08:00-09:00&areaName=%E7%BE%BD%E6%AF%9B%E7%90%831%E5%8F%B7%E5%9C%BA%E5%9C%B0&areaNickname=hall1']headers4 = {"Host":'ndyy.ncu.edu.cn','Referer':'https://ndyy.ncu.edu.cn/booking',"accept":'application/json, text/plain, */*',# "token" 一段时间会失效,需要经常更换"token":'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MzMxNjM0MDcsInVzZXJOYW1lIjoi546L5L2z5aiBIiwidXNlciI6IjQwMjIwMDIzMDEyNSIsInR5cGVDb2RlIjoiUzAxIn0.tW5jNDSuPIwEHoXnTjx_0hHpV8yTdqC2i4ad2Rcg1hs','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0'}order = session.get(url=url1[j],headers=headers4) # 预约print(order.text)if int(order.text['msg']) == None: # 如果预约成功就为Ture,否则就会不断进行While循环,直到预约成功t = 0except:t = 1
time2 = time.time() # 预约成功后的时间
print(time2-time1) # 打印用时
“token” 更新 ----F12键打开开发者界面
二、总代码
import requests
import timesession = requests.Session() # 用于存储 Cookie
account = ['402201314520'] # 用户名
password = ['1234567'] # 密码
time1 = time.time() # 记录初始时间for i in range(1):login_url = 'https://cas.ncu.edu.cn:8443/cas/login?service=http%3A%2F%2Fndyy.ncu.edu.cn%3A8089%2Fcas%2Flogin' # 场馆登入URLheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0'}data1 = {'name': account[i], 'pwd': password[i], } # 可用于多个账号的预约login = session.get(login_url, headers=headers, data=data1) # 登入操作print(login)# print(login.text) # 打印是否登入成功t = 1 # 用于12:00前的不断刷新预约界面while t == 1:try:for j in range(2): # 预约次数,即几个时间段'''url1 中的参数role=ROLE_STUDENT # 表示学生身份date=2024-12-03 # 预约日期startTime=08:00-09 # 预约时间areaName=%E7%BE%BD%E6%AF%9B%E7%90%8312%E5%8F%B7%E5%9C%BA%E5%9C%B0 # “羽毛球12号场地”这几个中文的URL编码 其实不同场地也就是 %8312% 不同,如: %831% 表示 “羽毛球1号场地”areaNickname=hall12 # “羽毛球12号场地” 的英文名称'''url1 = ['https://ndyy.ncu.edu.cn/api/badminton/saveReservationInformation?role=ROLE_STUDENT&date=2024-12-03&startTime=08:00-09:00&areaName=%E7%BE%BD%E6%AF%9B%E7%90%8312%E5%8F%B7%E5%9C%BA%E5%9C%B0&areaNickname=hall12','https://ndyy.ncu.edu.cn/api/badminton/saveReservationInformation?role=ROLE_STUDENT&date=2024-12-04&startTime=08:00-09:00&areaName=%E7%BE%BD%E6%AF%9B%E7%90%831%E5%8F%B7%E5%9C%BA%E5%9C%B0&areaNickname=hall1']headers4 = {"Host":'ndyy.ncu.edu.cn','Referer':'https://ndyy.ncu.edu.cn/booking',"accept":'application/json, text/plain, */*',# "token" 一段时间会失效,需要经常更换"token":'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MzMxNjM0MDcsInVzZXJOYW1lIjoi546L5L2z5aiBIiwidXNlciI6IjQwMjIwMDIzMDEyNSIsInR5cGVDb2RlIjoiUzAxIn0.tW5jNDSuPIwEHoXnTjx_0hHpV8yTdqC2i4ad2Rcg1hs','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0'}order = session.get(url=url1[j],headers=headers4) # 预约print(order.text)if int(order.text['msg']) == None: # 如果预约成功就为Ture,否则就会不断进行While循环,直到预约成功t = 0except:t = 1
time2 = time.time() # 预约成功后的时间
print(time2-time1) # 打印用时
结果:
<Response [200]> # 表示登入成功
{"code":"200","msg":""} # 表示第一个时间段的URL预约成功
{"code":"601","msg":"失败,请尝试刷新页面!"} # 预约失败的URL,会不断刷新,直到成功
{"code":"601","msg":"失败,请尝试刷新页面!"}
{"code":"601","msg":"失败,请尝试刷新页面!"}
{"code":"601","msg":"失败,请尝试刷新页面!"}
{"code":"601","msg":"失败,请尝试刷新页面!"}