在冬天进行羽毛球运动是一个很好的选择,它能帮助你保持身体活力,增强心肺功能,并促进血液循环。但是室友和师弟师妹反应,学校的羽毛球场地有限,手速慢的根本预约不到场地。
中午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' # 场馆登入URL
headers = {
'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 = 0
except:
t = 1
time2 = time.time() # 预约成功后的时间
print(time2-time1) # 打印用时
“token” 更新 ----F12键打开开发者界面
二、总代码
import requests
import time
session = 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' # 场馆登入URL
headers = {
'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 = 0
except:
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":"失败,请尝试刷新页面!"}