赞
踩
系统开放座位时快速预约指定位置
可以设置预约的时间段
运行以后会一直帮你抢,需要手动停止
即使遇到更强的脚本自动帮抢下一个座位
首先解决登录问题,通过F12找出登录请求包,分析对比一下包可以发现一般只有用户名和密码这个参数是变化的,然后用requests.session()的实例化去请求登录接口,登录成功。
然后预约座位抓一下包,分析包找到变化的关键的参数,一般情况下关键参数只有座位id、开始时间、结束时间,其他的参数一股脑照搬就行了,接下来用刚刚登录成功的那个requests.session()实例去请求即可。
万一脚本撞车了没抢到自己设定的座位怎么办,返回预约的结果,发现已经有人了自动预约下一个座位,也可以将自己心仪的座位写在列表里,这个抢不到抢下一个。
(为了不给学校系统添加负担,代码仅供参考,无法直接运行)
- import requests
- from datetime import date
- from datetime import timedelta
- import json
- import getopt
- import sys
- import time
-
-
- global headers
- headers = {
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0',
- 'Host': '',
-
- }
-
- #登录函数
- def login(id, pwd):
-
- l_params = {
- 'id': id,
- 'pwd': pwd,
- 'act': 'login',
- }
- #自己分析得到的接口,下同
- login_url = ''
- s = requests.session()
- re = s.post(url=login_url, headers=headers, params=l_params)
- #返回登录成功的实例
- return s
-
-
-
-
- #预约函数
- def yd(s, start, end, s_id):
- y_params = {
- "dialogid": "",
- #预定座位
- "dev_id": s_id,
- "room_id":"",
- "type":"dev",
- "prop":"",
- "number":"",
- "classkind":"",
- "test_name":"",
- "start": start,
- "end": end,
- "start_time": "800",
- "end_time": "2200",
- }
- y_url = ''
- re = s.get(url=y_url, headers=headers, params=y_params)
- print(re.text)
- res = json.loads(re.text)
- msg = res['msg']
- if msg == '操作成功!':
- print('success')
- return 1
- elif msg == '2020-09-11只能提前[1]天预约':
- return 0
- else:
- print('fail')
- return 2
-
- #脚本输入提示信息
- def useage():
- print(
- '''
- Usage:
- -i 学号(必填)
- -p 密码
- -s 座位id
- -b 开始时间,格式13:00,下同
- -e 结束时间
- ''')
-
- if __name__ == '__main__':
- id = pwd = None
- #不填默认抢这个这个时间段的这个座位
- s_id = '100458282'
- begin = '8:00'
- end = '22:00'
-
- #处理输入
- try:
- opts, args = getopt.getopt(sys.argv[1:], 'i:p:s:b:e:')
- for name, value in opts:
- if name == '-i':
- id = value
- if name == '-p':
- pwd = value
- if name == '-s':
- s_id = value
- if name == '-b':
- begin = value
- if name == '-e':
- end = value
- except getopt.GetoptError:
- useage()
- if not id:
- useage()
- sys.exit(3)
- if not pwd:
- pwd = id
-
- #先获取后天时间
- aftertomorrow = date.isoformat(date.today() + timedelta(days=2))
- while True:
- hour = int(time.strftime('%H',time.localtime(time.time())))
- m = int(time.strftime('%M', time.localtime(time.time())))
- #如果现在的明天等与之前的后天,即到了12点,开始抢座
- if date.isoformat(date.today() + timedelta(days=1)) == aftertomorrow:
-
- s = login(id, pwd)
-
- start = aftertomorrow + ' ' + begin
- endtime = aftertomorrow + ' ' + end
- result = yd(s, start, endtime, s_id)
-
- if result == 1:
- #预约成功
- aftertomorrow = date.isoformat(date.today() + timedelta(days=2))
- sleep_time = (23 - hour) * 3600 + (59 - m) * 60 + 35
- print('程序休眠{}s'.format(sleep_time))
- print(aftertomorrow)
- time.sleep(sleep_time)
-
- elif result == 2:
- #被预约,抢下一个id的座位
- s_id = str(int(s_id) - 1)
- continue
- else:
- continue
- else:
- sleep_time = (23 - hour) * 3600 + (59 - m) * 60
- time.sleep(sleep_time)
-
-
-
-
-
-
不知道你们的学校图书馆预约系统是什么样的,但是一般学校也不会花太多钱去搞这个,所以系统比较垃圾,大部分可以按照这个思路来。而且有些学校跟我们学校用的几乎相同的系统,肯定是出自同一个公司或者同一个模板的。如果你们学校也是类似的系统,代码改一下就能用。
看完之后想自己动手但是又不知道怎么抓包分析?看看这篇
我学校的系统主页大概长这样
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。