图书馆自动预约

图书馆自动预约微信登录问题

图书馆自动预约

前言

笔者心血来潮想做一个基于Python图书馆自动预约的项目,无奈笔者学校的图书馆预约只能在微信公众号上预约,而在其他地方查阅的方法都是找到了官网预约入口。笔者尝试找了很久还是没找到.

一、模拟登陆问题

笔者思绪万千,打开了编译器,导入了requests 库,刚想尝试下访问下图书馆才发现我还没有网站啊.
笔者在学校公众号上找不到图书馆的链接,所以笔者登陆PC端微信尝试打开预约的链接,成功获取到了链接,上代码:

import requests

url = "http://***.cn/wxindex.aspx?orgid=gh_2b221cae200e&unitid=1" #手动打码

html1 = requests.get(url)

print(html1.text)

运行结果:
在这里插入图片描述
后来得知电脑端不能直接访问,要修改 headers .
即:

html1 = requests.get(url,headers=headers)

为了获取头部信息,笔者几经辗转,最后找到了IOS端的一个强大的抓包软件Stream,APPStore可以直接下.(不理解抓包的读者自行查阅)

二、Stream的使用

进入软件点击抓包,走一下预约的流程,Stream里查看记录
笔者抓包截图(已打码):
在这里插入图片描述
从你有操作开始,点击其中一个包进入(已打码):
在这里插入图片描述
里面已经帮你分好是POST请求还是GET请求,整个请求头部就是你要写进headers的内容.
其中User-Agent简称UA就是你的设备信息,你的headers里改了UA代表你电脑伪装成你的手机访问了公众号,成功解决了“请在微信客户端打开”的问题
其中最关键的就是Cookie(不了解的自行查阅),如果你刚进入公众号不操作是没有Cookie的,所以如果找不到Cookie就翻后面几个包.
可以看到笔者抓取到的Cookie中有三部分:cookie_unit_name,dt_cookie_user_name_remember,ASP.NET_SessionId,笔者发现前两个是不变的,可能带有的就是你的账户信息,可第三个参数是隔段时间动态变化的。
可有意思的是,笔者删去了第三个元素依然能正常访问图书馆(难道是我们图书馆不行?).笔者查询了有关ASP.NET_SessionId的知识,了解到 如果你不携带ASP.NET_SessionId访问网址,系统会自动分配给你一个ASP.NET_SessionId,但是如果你写进headers的ASP.NET_SessionId不规范,就会访问错误。

那咱就不带! 附参考代码:

代码如下(示例):

import requests

url= "http://wx.lib.***"#其中一个网站

headers = {
    'Host': 'wx.lib.hunnu.edu.cn',
    'Accept': '',
    'X-Requested-With': '',
    'Accept-Language': '',
    'Accept-Encoding': '',
    'Content-Type': '',
    'Origin': '',
    'User-Agent': '',
    'Connection': '',
    'Referer': '',
    'Content-Length': '',
    'Cookie': ""
    }

html1 = requests.get(url,headers=headers)
print(html1.text)

三、预约

既然ASP.NET_SessionI不用写进,那代表抓取的Cookie是通用的,那就代表着你写的这个headers可以在微信公众号里的各个界面畅通无阻.
直接找到有关预约的包,即带有表单的包,或者你可查看响应找到.
表单里的信息就是你要POST进去的date,有关date里的参数因学校而异就需要自己分析了
附参考代码:


import requests

url= "http://wx.lib.***"  #最后预约的url

headers = {
    'Host': 'wx.lib.hunnu.edu.cn',
    'Accept': '',
    'X-Requested-With': '',
    'Accept-Language': '',
    'Accept-Encoding': '',
    'Content-Type': '',
    'Origin': '',
    'User-Agent': '',
    'Connection': '',
    'Referer': '',
    'Content-Length': '',
    'Cookie': ""
    }

date="复制你表单里的date(完整复制)"

html1 = requests.get(url,headers=headers,date=date)
print(html1.text)

最后运行看结果就知道是否成功了,附笔者结果:
在这里插入图片描述

四、完善

最后,你可以自己设计输入,再将输入结果转为date信息,基操自己尝试.
为了能实现自动预约,自己算好开始预约的时间,利用time库的sleep函数达到倒计时的目的,

import time
time.sleep(300)

300表示300秒即5分钟.
最后在写个while语句或者if语句,如果没抢到就就继续抢.为了不给学校图书馆服务器增加负担,建议在循环里加个 time.sleep(1) 停顿一下,视情况而定.
总体而言还是很简单的.

  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

T or P

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值