selenium使用_Python python使用BrowserMob Proxy + Selenium进阶版

本文介绍了如何使用Python的Selenium结合Browsermob-Proxy进行高级网络请求抓取。通过开启代理,配置Selenium WebDriver,捕获network数据,并解决抓取过程中遇到的编码问题。文章详细阐述了遇到的坑及解决方案,包括切换到browserup-proxy库以处理压缩问题。
摘要由CSDN通过智能技术生成

背景

在自动化测试的时候,我们经常用python浏览器的开发者工具,分析页面元素,样式,这些属于element。同时也可以查看浏览器的性能,请求情况等(console),另外还可以查看控制台里面的报错信息。

7565935873b3cca749807cdef1d256ae.png

自动化测试selenium webdriver工具能够定位DOM元素,与之交互,读取样式以进行验证等。但是Selenium只处理“结果”,它无法得知浏览器的网络控制台的信息。如果浏览器在渲染出页面之前,从某个站点加载大量资源信息,Selenium无法知道。

另外,现在很多站点都是异步加载,通过api的方式请求,然后返回json到前端,进行渲染。如果使用selenium,是看不到这部分数据的。

如果要想要获取到api的数据,就要按照api请求的方式进行访问。但是这个时候一般都需要计算签名,一堆复杂的js,非专业前端,直接劝退。但是这种情况通过浏览器的开发者工具是可以看到的,结合selenium,如果能将network下面的数据拿到,那就随便分析了。

e968a1da024d577ca295248fd73d79fc.png

解决这个问题的思路就是,通过自建proxy,将请求捕获,然后再代理上将数据截取出来。这个方案类似fiddler。这里代理使用Browsermob-Proxy。

Browsermob-Proxy 介绍

Browsermob-Proxy(以后,简称BMP)是一个开源的Java编写的基于LittleProxy的代理服务。Browsermob-Proxy的具体流程有点类似Flidder或Charles。即开启一个端口并作为一个标准代理存在,当HTTP客户端(浏览器等)设置了这个代理,则可以抓取所有的请求细节并获取返回内容

项目主页https://github.com/lightbody/browsermob-proxy/

直接到release部分下载最新的版本即可。最新的是2.1.4,下载下来,解压到项目工程路径。

3afcb56fc1c780adcafd405ae09f79fa.png

因为BMP是java写的,所以允许需要提前配置好java(再命令行java或者javac命令没有报错即可)。

目录结构中关键的路径

  • bin目录 提供linux和window下的运行程序,conf目录下配置了日志的级别,可以根据需要调整,比如将日志调整为debug级别
  • 其他 主要的jar包和依赖,可以忽略

BMP提供了REST的方式去调用,创建proxy等,参考项目的README。

这里主要使用python来进行管理。

pip install browsermob-proxy

Browsermob-Proxy的使用

开启proxy

这里Server需要传入bmp bin目录下可执行文件的路径,windows传入browsermob-proxy.bat,linux直接传入browsermob-proxy。

start之后,创建一个proxy

from browsermobproxy import Server
# 启动代理

server = Server(./selenium_spider/browsermob-proxy-2.1.4/bin/browsermob-proxy.bat')
server.start() # 开启server
proxy = server.create_proxy() # 开启proxy client

配置selenium webdriver使用

这里引入Options,进行selenium webdriver的设置。具体设置以及含义如下:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值