之前有人找我做一个他们学校一键报备的小东西,然后因为比赛原因,我也就一直没去弄,说月底再来找我,然后今天来找到了我,稍微看了下。
既然是健康报备,那就需要登录啥的,这就需要账号密码什么的了。
经过分析发现,账号密码虽然没有加密,但是他在每次数据请求的请求头的时候都放了一个decodes参数,然后是由学号 Unifri 时间戳组成
然后再往里面分析的时候,就有点看不懂了,好吧是我太菜了
考虑到也就几百块,也就没必要为这再去深入学一下了,于是想到了selenium,去模拟操作,然后获取请求中的decodes参数。
但是吧,似乎selenium不提供获取网络请求,经过百度发现有一个东西是browsermobproxy
Browsermob-Proxy是一个开源的Java编写的基于LittleProxy的代理服务。Browsermob-Proxy的具体流程有点类似与Flidder或Charles。即开启一个端口并作为一个标准代理存在,当HTTP客户端(浏览器等)设置了这个代理,则可以抓取所有的请求细节并获取返回内容。
先在python的虚拟环境中安装一下对应的包:
pip install browsermob-proxy
然后去GitHub下载一下这个东西:https://github.com/lightbody/browsermob-proxy/releases
为了提升速度,已经将它存到了网盘:https://mo.own-cloud.cn/#/s/Y924TQ
下载完之后,将其解压到项目文件同目录
开启proxy
代码语言:javascript复制from browsermobproxy import Server
server = Server('browsermob-proxy-2.1.4/bin/browsermob-proxy.bat') #这是bat文件路径
server.start()
proxy = server.create_proxy()
然后配置proxy启动Webdriver
代码语言:javascript复制chrome_options = Options()
proxy.new_har('bb', options={'captureHeaders': True})
chrome_options.add_argument('--proxy-server={0}'.format(proxy.proxy))
driver = webdriver.Chrome(chrome_options=chrome_options)
然后就可以通过
代码语言:javascript复制result = proxy.har
获取到所有的网络请求数据了,这边建议自己debug看一下,更加清晰