《ython-643524.docx》由会员分享,可在线阅读,更多相关《ython-643524.docx(3页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、python实现图书馆抢座(自动预约)功能的示例代码脚本功能系统开放座位时快速预约指定位置可以设置预约的时间段运行以后会一直帮你抢,需要手动停止 即使遇到更强的脚本自动帮抢下一个座位实现首先解决登录问题,通过F12找出登录请求包,分析对比一下包可以发现一般只有用户名和密码这个参数是变化的,然后用requests.session()的实例化去请求登录接口, 登录成功。然后预约座位抓一下包,分析包找到变化的关键的参数,一般情况下关键参数只有座位id、开始时间、结束时间,其他的参数一股脑照搬就行了,接下来用刚刚登录成功 的那个requests.session()实例去请求即可。优化既然是每天都帮抢那
2、么一直去请求可不行,一是给服务器造成负担,二是如果有什么反爬策略容易被发现被封。所以每天到12点(系统预约开放时间)的时候发预约包就 行。万一脚本撞车了没抢到自己设定的座位怎么办,返回预约的结果,发现已经有人了自动预约下一个座位,也可以将自己心仪的座位写在列表里,这个抢不到抢下一个。 代码(为了不给学校系统添加负担,代码仅供参考,无法直接运行)import requestsfrom datetime import date from datetime import timedelta import jsonimport getopt import sys import timeglobal h
3、eaders 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)#返回登录成功的实例retu
4、rn 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 = re
5、smsg if msg = 操作成功!:print(success) return 1elif 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 = 100458282begin = 8:00end = 22:00#处理输入try:opts, args =
6、 getopt.getopt(sys.argv1:, i:p:s:b:e:) for name, value in opts:if name = -i: id = valueif name = -p: pwd = valueif name = -s: s_id = valueif name = -b: begin = value if name = -e: end = valueexcept getopt.GetoptError: useage()if not id: useage() sys.exit(3) if not pwd: pwd = id#先获取后天时间aftertomorrow
7、= 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 = aftertomorr
8、ow + + 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 + 35print(程序休眠s.format(sleep_time)print(aftertomorrow) time.sleep(sleep_time)elif result
9、 = 2:#被预约,抢下一个id的座位s_id = str(int(s_id) - 1) continueelse: continue else:sleep_time = (23 - hour) * 3600 + (59 - m) * 60 time.sleep(sleep_time)结语不知道你们的学校图书馆预约系统是什么样的,但是一般学校也不会花太多钱去搞这个,所以系统比较垃圾,大部分可以按照这个思路来。而且有些学校跟我们学校用的 几乎相同的系统,肯定是出自同一个公司或者同一个模板的。如果你们学校也是类似的系统,代码改一下就能用。我学校的系统主页大概长这样您可能感兴趣的文章:python模拟表单提交登录图书馆python实现图书馆研习室自动预约功能Python Requests模拟登录实现图书馆座位自动预约python&MongoDB爬取图书馆借阅记录