湖州师范学院 湖州学院 图书馆抢座位脚本 python 秒抢
期末抢座位很麻烦,模拟点击脚本抢的又太慢,毕业了用不到了,留给后来人
写了个request脚本
理论上旧版IC空间管理系统都可以用
python脚本:
#coding:utf-8
import time
import requests
import json
import re
import datetime as da
import pymysql
import sys
#reload(sys) //py2
#sys.setdefaultencoding('utf-8') //py2
from datetime import datetime
# 增加相对路径,这样可以进行相对引用
sys.path.append("..")
# 建立数据库连接
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='tsg',
passwd='XXXX', #数据库密码
db="tsg",
charset='utf8mb4') #数据库部分,用于查找座位的id下面给出该表的数据,需自行搭建,或写死
cursor = conn.cursor() # 执行完毕返回的结果默认以元组的形式保存
def selectData(condition):
cursor.execute("SELECT kindId,devId,labId FROM stainfo WHERE seatName='{seatName}'".format(seatName=condition)) # 使用 execute() 方法执行 SQL 查询,注意有引号
data = cursor.fetchone()
# print(data)
# 关闭sql连接
print(data)
#cursor.close()
#conn.close()
return data
def run(user,passwd,seatName,starttime,endtime,days):
dayss=""
for i in days:
dayss=dayss+str((int(i)+7-2)%7)
dayss=dayss.replace('0','7')
print(dayss)
day=str(datetime.now().isoweekday())
if(day not in dayss):
print(user+"未设置预约")
return 1
loginUrl = "http://icspace.lib.zjhu.edu.cn/ClientWeb/pro/ajax/login.aspx"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
}
def logout():
res = r.get(url="http://icspace.lib.zjhu.edu.cn/ClientWeb/pro/ajax/login.aspx?act=logout",headers=headers,timeout=5)
print(res.text)
def getScheduled(kindid, devid, labid, data, starttime, endtime):
scheduledUrl = "http://icspace.lib.zjhu.edu.cn/ClientWeb/pro/ajax/reserve.aspx?kind_id={}&dev_id={}&lab_id={}&type=dev&prop=&test_id=&resv_id=&term=&min_user=&max_user=&mb_list=&start={}%20{}&end={}%20{}&memo=&act=set_resv"
flag=0
i=0
res = r.get(url=scheduledUrl.format(kindid, devid, labid, data, starttime, data, endtime),headers=headers,timeout=5)
print(i,datetime.now(),res.text)
if "操作成功" in res.text:
flag=1
elif "方可预约" in res.text:
flag=0
#time.sleep(0.005)
else:
flag=1
logout()
return flag
r = requests.session()
loginData = {
"act": "login",
"id": user,
"pwd": passwd
}
key = "SCT39442TVtfq4drt4J3Zb81NAeocdAJ8"
# 登录获取cookie
r.post(loginUrl, data=loginData,headers=headers,timeout=5)
# 根据位置号从数据库查出信息
infos = selectData(seatName)
kindid = infos[0]
devid = infos[1]
labid = infos[2]
print(r.cookies)
today = da.date.today()
afterTomorrow = today + da.timedelta(days=2)
# print(afterTomorrow)
resp=getScheduled(kindid, devid,labid,afterTomorrow,starttime,endtime)
if(resp==0):
return 1
#time.sleep(0.1)
#run(user,passwd,seatName,starttime,endtime,days)
#return 0
my_datas = ""
url_myReverse = "http://icspace.lib.zjhu.edu.cn/ClientWeb/pro/ajax/reserve.aspx?stat_flag=9&act=get_my_resv"
try:
myReverse = r.get(url=url_myReverse,headers=headers,timeout=5)
datas = json.loads(myReverse.text)['data']
#print("datas:",datas)
# print(len(datas))
for index,data in enumerate(datas):
if index == len(datas) -1:
tmp_tuple = (data["timeDesc"],data["devName"],)
my_datas += str(tmp_tuple)
else:
tmp_tuple = (data["timeDesc"], data["devName"],)
my_datas += str(tmp_tuple) + "\n\n"
print("my_datas:",my_datas)
except Exception as e:
print(1)
return 0
time.sleep(3)
flag=1
while(flag):
try:
print(datetime.now())
flag=run('20180821xx','xxxxxx','西7F135','8:00','21:30',"1234567")
#学号,密码,座位号,开始时间,结束时间,周几预约 1代表星期六预约周一的,7代表星期五预约周日的
except:
flag=1
cursor.close()
conn.close()运行截图:

240107更新:
图书馆已经换系统了,新版本见
https://www.hyluz.cn/post/86042.html
不再逆向登录过程了,直接selenium模拟登录拿cookie