脚本功能
系统开放座位时快速预约指定位置
可以设置预约的时间段
运行以后会一直帮你抢,需要手动停止
即使遇到更强的脚本自动帮抢下一个座位
实现
首先解决登录问题,通过F12找出登录请求包,分析对比一下包可以发现一般只有用户名和密码这个参数是变化的,然后用requests.session()的实例化去请求登录接口,登录成功。
然后预约座位抓一下包,分析包找到变化的关键的参数,一般情况下关键参数只有座位id、开始时间、结束时间,其他的参数一股脑照搬就行了,接下来用刚刚登录成功的那个requests.session()实例去请求即可。
优化
既然是每天都帮抢那么一直去请求可不行,一是给服务器造成负担,二是如果有什么反爬策略容易被发现被封。所以每天到12点(系统预约开放时间)的时候发预约包就行。
万一脚本撞车了没抢到自己设定的座位怎么办,返回预约的结果,发现已经有人了自动预约下一个座位,也可以将自己心仪的座位写在列表里,这个抢不到抢下一个。
代码
(为了不给学校系统添加负担,代码仅供参考,无法直接运行)
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)
结语
不知道你们的学校图书馆预约系统是什么样的,但是一般学校也不会花太多钱去搞这个,所以系统比较垃圾,大部分可以按照这个思路来。而且有些学校跟我们学校用的几乎相同的系统,肯定是出自同一个公司或者同一个模板的。如果你们学校也是类似的系统,代码改一下就能用。
我学校的系统主页大概长这样
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 邱锋泽.2024-COlOR.Free【发现梦想】【FLAC分轨】
- 群星 《10年朋友Vol.8》滚石台湾版[WAV+CUE][1.G]
- 群星《2024好听新歌31》十倍音质 U盘音乐 [WAV分轨][1.1G]
- 群星《全天后》华纳[WAV+CUE][1.1G]
- 许乐《声愿HQCD》[正版原抓WAV+CUE]
- 黄凯芹《给你留念》头版限量编号MQA-UHQCD2024[低速原抓WAV+CUE]
- 黑鸭子2008-今生最爱[首版][WAV+CUE]
- 彭海桐.2000-好好想想你【SONY】【WAV+CUE】
- 群星.1995-亚洲电视剧集主题曲大全·乐作剧2CD【滚石】【WAV+CUE】
- 林强.1992-春风少年兄【魔岩】【WAV+CUE】
- 世界顶级汽车音响试音王《金色的草原》24K金碟[低速原抓WAV+CUE][1G]
- 周深 /Faouzia《解密 电影原声带》[320K/MP3][39.32MB]
- 周深 /Faouzia《解密 电影原声带》[FLAC/分轨][199.46MB]
- 英雄联盟s14亚军队伍是哪支 英雄联盟s14亚军队伍介绍
- 英雄联盟s14夺冠队伍是哪支 英雄联盟s14夺冠队SKT T1队伍介绍