-->
当前位置:首页 > DayDayUp > 正文内容

湖州师范学院 湖州学院 图书馆抢座位脚本 python 秒抢

Luz3年前 (2022-03-07)DayDayUp6111

期末抢座位很麻烦,模拟点击脚本抢的又太慢,毕业了用不到了,留给后来人

写了个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()


运行截图:

image.png


240107更新:

图书馆已经换系统了,新版本见

https://hyluz.cn/post/86042.html

不再逆向登录过程了,直接selenium模拟登录拿cookie

评论列表

一生只够爱一人
一生只够爱一人
1年前 (2023-10-10)

能问一下为什么我运行不了吗?

Luz 回复:
图书馆换系统了
12个月前 (01-02)

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。