python实现图书馆预约

编程入门 行业动态 更新时间:2024-10-26 22:21:14

python实现<a href=https://www.elefans.com/category/jswz/34/1752404.html style=图书馆预约"/>

python实现图书馆预约

前言

图书馆预约基本就分为2个步骤
1.登录----获取sessionid或者token(其实就是一个类似身份凭证的东西)
2.预约—调用预约接口
所以针对这两部分来进行用python的实现达到自动预约的目的

最终结果的日志


(11:35:50.634518):(哈佛大学):(2020204521): session过期了>>>>>>>>>>>>>>>>准备登陆
(11:35:50.634518):(哈佛大学):(2020204521): >>>>>>>>>>>>>>>操作系统:Windows
(11:36:03.408291):(哈佛大学):(2020204521): 登录成功>>>>>>>>>>>>>>>>>>>>>>>>获得token:y23ob25dta42vqbq
(11:36:04.487851):(哈佛大学):(1:1-1,2-0,3-0): loop: aim:11:37,now:11:36:04
(11:36:56.580618):(哈佛大学):(1:1-1,2-0,3-0): loop: aim:11:37,now:11:36:56
(11:37:01.584736):(哈佛大学):(2020204521): 抢课请求 > {'dialogid': '', 'dev_id': '100471111', 'lab_id': '', 'kind_id': '', 'room_id': '', 'type': 'dev', 'prop': '', 'test_id': '', 'term': '', 'number': '', 'classkind': '', 'test_name': '', 'start': '2022-09-19 13:30', 'end': '2022-09-19 14:00', 'start_time': '1330', 'up_file': '', 'memo': '', 'act': 'set_resv', '_': 1663472221584}
(11:37:01.671053):(哈佛大学):(2020204521): 选座(Y206-099),请求时间:11:37:01 ,抢课结果 > {"ret":0,"act":"set_resv","msg":"当前时间预约冲突","data":null,"ext":null}
(11:37:02.587573):(哈佛大学):(2020204521): 抢课请求 > {'dialogid': '', 'dev_id': '100471111', 'lab_id': '', 'kind_id': '', 'room_id': '', 'type': 'dev', 'prop': '', 'test_id': '', 'term': '', 'number': '', 'classkind': '', 'test_name': '', 'start': '2022-09-19 13:30', 'end': '2022-09-19 14:00', 'start_time': '1330', 'up_file': '', 'memo': '', 'act': 'set_resv', '_': 1663472222587}
(11:37:02.646453):(哈佛大学):(2020204521): 选座(Y206-099),请求时间:11:37:02 ,抢课结果 > {"ret":0,"act":"set_resv","msg":"当前时间预约冲突","data":null,"ext":null}
(11:37:03.589404):(哈佛大学):(2020204521): 抢课请求 > {'dialogid': '', 'dev_id': '100471111', 'lab_id': '', 'kind_id': '', 'room_id': '', 'type': 'dev', 'prop': '', 'test_id': '', 'term': '', 'number': '', 'classkind': '', 'test_name': '', 'start': '2022-09-19 13:30', 'end': '2022-09-19 14:00', 'start_time': '1330', 'up_file': '', 'memo': '', 'act': 'set_resv', '_': 1663472223589}
(11:37:03.652886):(哈佛大学):(2020204521): 选座(Y206-099),请求时间:11:37:03 ,抢课结果 > {"ret":0,"act":"set_resv","msg":"当前时间预约冲突","data":null,"ext":null}
(11:37:04.592958):(哈佛大学):(2020204521): 抢课请求 > {'dialogid': '', 'dev_id': '100471111', 'lab_id': '', 'kind_id': '', 'room_id': '', 'type': 'dev', 'prop': '', 'test_id': '', 'term': '', 'number': '', 'classkind': '', 'test_name': '', 'start': '2022-09-19 13:30', 'end': '2022-09-19 14:00', 'start_time': '1330', 'up_file': '', 'memo': '', 'act': 'set_resv', '_': 1663472224592}
(11:37:04.659778):(哈佛大学):(2020204521): 选座(Y206-099),请求时间:11:37:04 ,抢课结果 > {"ret":0,"act":"set_resv","msg":"当前时间预约冲突","data":null,"ext":null}
(11:37:05.594824):(哈佛大学):(2020204521): 抢课请求 > {'dialogid': '', 'dev_id': '100471111', 'lab_id': '', 'kind_id': '', 'room_id': '', 'type': 'dev', 'prop': '', 'test_id': '', 'term': '', 'number': '', 'classkind': '', 'test_name': '', 'start': '2022-09-19 13:30', 'end': '2022-09-19 14:00', 'start_time': '1330', 'up_file': '', 'memo': '', 'act': 'set_resv', '_': 1663472225594}
(11:37:05.653701):(哈佛大学):(2020204521): 选座(Y206-099),请求时间:11:37:05 ,抢课结果 > {"ret":0,"act":"set_resv","msg":"当前时间预约冲突","data":null,"ext":null}
(11:37:06.596145):(哈佛大学):(2020204521): 抢课请求 > {'dialogid': '', 'dev_id': '100471111', 'lab_id': '', 'kind_id': '', 'room_id': '', 'type': 'dev', 'prop': '', 'test_id': '', 'term': '', 'number': '', 'classkind': '', 'test_name': '', 'start': '2022-09-19 13:30', 'end': '2022-09-19 14:00', 'start_time': '1330', 'up_file': '', 'memo': '', 'act': 'set_resv', '_': 1663472226596}
(11:37:06.659975):(哈佛大学):(2020204521): 选座(Y206-099),请求时间:11:37:06 ,抢课结果 > {"ret":0,"act":"set_resv","msg":"当前时间预约冲突","data":null,"ext":null}
(11:37:12.598921):(哈佛大学):(1:1-1,2-0,3-0): loop: aim:11:37,now:11:37:12
(11:37:16.603760):(哈佛大学):(1:1-1,2-0,3-0): loop: aim:11:37,now:11:37:16
(11:38:11.654454):(哈佛大学):(2020204521): 尝试6次, 选座(Y206-099)成功.请求时间:11:37:06,响应时间:11:37:09

登录

手动登录

手动进行网页登录,登录后通过浏览器复制出sessionid或者token。下图中的ASP.NET_SessionId就是我们需要的。

脚本登录

使用python脚本进行登录,获取sessionid或者token。个人使用的话建议用手动登录就行。
代码逻辑:
1.通过python+selenium打开浏览器
2.然后模拟输入账号密码点击登录就行
3.在通过代码获取ASP.NET_SessionId
参考代码

def login(self, proxy_url=""):self.browser = SeleniumUtil.getBrowser(self, proxy_url)self.wait = WebDriverWait(self.browser, 20)  # 超时时长为10sgetToken = False# 打开网页self.browser.get(self.cas_login + '?service=' + self.ic_url_index)# 等待 账号密码 出现username_input = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#username')))username_input.send_keys(self.username)password_input = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#password')))password_input.send_keys(self.password)time.sleep(0.5)login_button = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.btn-lg')))login_button.click()time.sleep(5)# 获取cookiescookies = self.browser.get_cookies()if len(cookies) > 0:for cookie in cookies:if cookie['name'] == 'ASP.NET_SessionId':self.ASP_NET_SessionId = cookie['value']SessionUtil.setSessionFileContent(self, self.ASP_NET_SessionId)self.myprint('>>>>>>>>>>>>>>>>>>>>>>>>获得token:' + self.ASP_NET_SessionId)getToken = Trueif not getToken:self.myprint('>>>>>>>>>>>>>>>>>>>>>>>>获得token失败')# todo 消息(邮件短信)提醒SeleniumUtil.browser_map.pop(client_key)self.browser.close()self.browser.quit()

##预约
观察浏览器的预约接口可以知道预约的地址:
主要的参数:dev_id,start,end,start_time,end_time

:8080/ClientWeb/pro/ajax/reserve.aspx?dialogid=&dev_id=100456433&lab_id=&kind_id=&room_id=&type=dev&prop=&test_id=&term=&Vnumber=&classkind=&test_name=&start=2022-09-18+12%3A30&end=2022-09-18+99%3A00&start_time=1230&end_time=9900&up_file=&memo=&act=set_resv&_=1663469192955


#####dev_id是什么
dev_id是你要预约的座位id,获取方式点击座位找到元素key的值就是dev_id。看图

python预约接口实现:

    def appoint(self):dev_id = self.seatIdList[self.loopCount % len(self.seatIdList)]nowTime = datetime.datetime.now()appointmentData = (datetime.datetime.now() + datetime.timedelta(days=+1)).strftime("%Y-%m-%d")start_time = self.start_timeend_time = self.end_timeparams = {'dialogid': '','dev_id': dev_id,'lab_id': '','kind_id': '','room_id': '','type': 'dev','prop': '','test_id': '','term': '','number': '','classkind': '','test_name': '','start': '{} {}:{}'.format(appointmentData, start_time[0], start_time[1]),'end': '{} {}:{}'.format(appointmentData, end_time[0], end_time[1]),'start_time': start_time[0] + start_time[1],'up_file': '','memo': '','act': 'set_resv','_': int(time.time() * 1000)}self.myprint('抢课请求 > {}'.format(params))requestTime = time.strftime("%X")res = self.sess.get(self.ic_url_appoint,params=params, headers=self.getHeaders(self.ic_url_appoint), proxies=self.getProxys())dev_name = SeatMapUtil.transformationToSeatName(self.school, dev_id)self.myprint('选座({}),请求时间:{} ,抢课结果 > {}'.format(dev_name, requestTime, res.text))res_json = res.json()return res_json

##组合代码
一般预约前1-5分钟登录。到时间就调用预约接口、


(11:35:50.634518):(哈佛大学):(2020204521): session过期了>>>>>>>>>>>>>>>>准备登陆
(11:35:50.634518):(哈佛大学):(2020204521): >>>>>>>>>>>>>>>操作系统:Windows
(11:36:03.408291):(哈佛大学):(2020204521): 登录成功>>>>>>>>>>>>>>>>>>>>>>>>获得token:y23ob25dta42vqbq
(11:36:04.487851):(哈佛大学):(1:1-1,2-0,3-0): loop: aim:11:37,now:11:36:04
(11:36:56.580618):(哈佛大学):(1:1-1,2-0,3-0): loop: aim:11:37,now:11:36:56
(11:37:01.584736):(哈佛大学):(2020204521): 抢课请求 > {'dialogid': '', 'dev_id': '100471111', 'lab_id': '', 'kind_id': '', 'room_id': '', 'type': 'dev', 'prop': '', 'test_id': '', 'term': '', 'number': '', 'classkind': '', 'test_name': '', 'start': '2022-09-19 13:30', 'end': '2022-09-19 14:00', 'start_time': '1330', 'up_file': '', 'memo': '', 'act': 'set_resv', '_': 1663472221584}
(11:37:01.671053):(哈佛大学):(2020204521): 选座(Y206-099),请求时间:11:37:01 ,抢课结果 > {"ret":0,"act":"set_resv","msg":"当前时间预约冲突","data":null,"ext":null}
(11:37:02.587573):(哈佛大学):(2020204521): 抢课请求 > {'dialogid': '', 'dev_id': '100471111', 'lab_id': '', 'kind_id': '', 'room_id': '', 'type': 'dev', 'prop': '', 'test_id': '', 'term': '', 'number': '', 'classkind': '', 'test_name': '', 'start': '2022-09-19 13:30', 'end': '2022-09-19 14:00', 'start_time': '1330', 'up_file': '', 'memo': '', 'act': 'set_resv', '_': 1663472222587}
(11:37:02.646453):(哈佛大学):(2020204521): 选座(Y206-099),请求时间:11:37:02 ,抢课结果 > {"ret":0,"act":"set_resv","msg":"当前时间预约冲突","data":null,"ext":null}
(11:37:03.589404):(哈佛大学):(2020204521): 抢课请求 > {'dialogid': '', 'dev_id': '100471111', 'lab_id': '', 'kind_id': '', 'room_id': '', 'type': 'dev', 'prop': '', 'test_id': '', 'term': '', 'number': '', 'classkind': '', 'test_name': '', 'start': '2022-09-19 13:30', 'end': '2022-09-19 14:00', 'start_time': '1330', 'up_file': '', 'memo': '', 'act': 'set_resv', '_': 1663472223589}
(11:37:03.652886):(哈佛大学):(2020204521): 选座(Y206-099),请求时间:11:37:03 ,抢课结果 > {"ret":0,"act":"set_resv","msg":"当前时间预约冲突","data":null,"ext":null}
(11:37:04.592958):(哈佛大学):(2020204521): 抢课请求 > {'dialogid': '', 'dev_id': '100471111', 'lab_id': '', 'kind_id': '', 'room_id': '', 'type': 'dev', 'prop': '', 'test_id': '', 'term': '', 'number': '', 'classkind': '', 'test_name': '', 'start': '2022-09-19 13:30', 'end': '2022-09-19 14:00', 'start_time': '1330', 'up_file': '', 'memo': '', 'act': 'set_resv', '_': 1663472224592}
(11:37:04.659778):(哈佛大学):(2020204521): 选座(Y206-099),请求时间:11:37:04 ,抢课结果 > {"ret":0,"act":"set_resv","msg":"当前时间预约冲突","data":null,"ext":null}
(11:37:05.594824):(哈佛大学):(2020204521): 抢课请求 > {'dialogid': '', 'dev_id': '100471111', 'lab_id': '', 'kind_id': '', 'room_id': '', 'type': 'dev', 'prop': '', 'test_id': '', 'term': '', 'number': '', 'classkind': '', 'test_name': '', 'start': '2022-09-19 13:30', 'end': '2022-09-19 14:00', 'start_time': '1330', 'up_file': '', 'memo': '', 'act': 'set_resv', '_': 1663472225594}
(11:37:05.653701):(哈佛大学):(2020204521): 选座(Y206-099),请求时间:11:37:05 ,抢课结果 > {"ret":0,"act":"set_resv","msg":"当前时间预约冲突","data":null,"ext":null}
(11:37:06.596145):(哈佛大学):(2020204521): 抢课请求 > {'dialogid': '', 'dev_id': '100471111', 'lab_id': '', 'kind_id': '', 'room_id': '', 'type': 'dev', 'prop': '', 'test_id': '', 'term': '', 'number': '', 'classkind': '', 'test_name': '', 'start': '2022-09-19 13:30', 'end': '2022-09-19 14:00', 'start_time': '1330', 'up_file': '', 'memo': '', 'act': 'set_resv', '_': 1663472226596}
(11:37:06.659975):(哈佛大学):(2020204521): 选座(Y206-099),请求时间:11:37:06 ,抢课结果 > {"ret":0,"act":"set_resv","msg":"当前时间预约冲突","data":null,"ext":null}
(11:37:12.598921):(哈佛大学):(1:1-1,2-0,3-0): loop: aim:11:37,now:11:37:12
(11:37:16.603760):(哈佛大学):(1:1-1,2-0,3-0): loop: aim:11:37,now:11:37:16
(11:38:11.654454):(哈佛大学):(2020204521): 尝试6次, 选座(Y206-099)成功.请求时间:11:37:06,响应时间:11:37:09

更多推荐

python实现图书馆预约

本文发布于:2024-02-11 17:49:30,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1682408.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:图书馆   python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!