selenium获取网络请求

Lan
Lan
2021-01-11 / 0 评论 / 954 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年01月11日,已超过1412天没有更新,若内容或图片失效,请留言反馈。

之前有人找我做一个他们学校一键报备的小东西,然后因为比赛原因,我也就一直没去弄,说月底再来找我,然后今天来找到了我,稍微看了下。

既然是健康报备,那就需要登录啥的,这就需要账号密码什么的了。

经过分析发现,账号密码虽然没有加密,但是他在每次数据请求的请求头的时候都放了一个decodes参数,然后是由学号+Unifri+时间戳组成

image.png

然后再往里面分析的时候,就有点看不懂了,好吧是我太菜了

image.png

考虑到也就几百块,也就没必要为这再去深入学一下了,于是想到了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

from browsermobproxy import Server

server = Server('browsermob-proxy-2.1.4/bin/browsermob-proxy.bat') #这是bat文件路径
server.start()
proxy = server.create_proxy()

然后配置proxy启动Webdriver

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)

然后就可以通过

result = proxy.har

获取到所有的网络请求数据了,这边建议自己debug看一下,更加清晰

0

评论 (0)

取消