Selenium通过设置代理实现抓取HTTPS请求

起因

Selenium本身是不支持HTTP请求抓取的,因为其团队认为这个不是selenium要解决的问题(确实也是)。所以推荐使用一个相关联的项目 -- BrowserMobProxy。
具体项目首页见:https://github.com/lightbody/browsermob-proxy

尝试

因为项目需要,所以就研究了下BrowserMobProxy。它其实是一个java实现的开源代理项目,它与普通的代理不同之处在于:

  • 它支持REST API接口(可以通过http请求来动态创建代理服务)
  • 默认启动的是一个代理Manager,它会管理N多个代理服务(我们真正使用的就是这个代理服务)
  • 可以支持动态的代理配置

一张图看懂BrowserMobProxy的业务逻辑。

即在使用代理之前,需要先启动代理Manager;而这个Manager提供了REST API接口,支持动态创建代理服务。(它会维护一批申请过的代理服务)之后我们使用的其实都是新申请的代理服务。(所以它并不是一个代理实例,而是一个代理管理服务)

使用

要使用BrowserMobProxy首先你需要启动它的代理Manager。有3种方式:

  • 直接通过bin目录下的脚本文件启动(如:browsermob-proxy.bat)
  • 在程序中动态执行脚本文件
  • JAVA项目可以导入到项目中通过SDK启动

BrowserMobProxy的代理Manager启动后,就可以向它申请具体的代理服务了。主要有2种方式:

  • REST API方式
  • JAVA的SDK方式

由于这里是讲Python相关的,所以后面只讲REST API方式。启动代理Manager和申请代理服务的代码如下:

BROWSERMOBPROXY = r"D:\browsermob-proxy-2.1.1\bin\browsermob-proxy.bat"
server = browsermobproxy.Server(BROWSERMOBPROXY, {'port': 8080})    # 初始化一个代理Manager服务,并监听8080端口
server.start()                                      # 启动代理Manager服务
proxy = server.create_proxy()                       # 向代理Manager服务申请一个代理服务,会使用默认端口8081
print(proxy.port)

上述代码是在程序中执行了BrowserMobProxy的启动脚本,然后申请了一个代理服务。当然,你还可以先手动启动Bro

Selenium可以通过结合Browsermob-Proxy获取网络请求的信息。通过使用Browsermob-Proxy,你可以捕获浏览器发出的所有网络请求以及它们的返回信息。下面是使用SeleniumBrowsermob-Proxy获取网络请求的步骤: 1. 首先,确保你已经安装了SeleniumBrowsermob-Proxy,并从官方网站下载了相应的浏览器驱动程序。 2. 创建一个Browsermob-Proxy服务器对象,并启动它。 3. 创建一个Selenium WebDriver对象,并将代理设置Browsermob-Proxy服务器的地址和端口。 4. 使用Selenium WebDriver访问你要进行网络请求抓取的网页。 5. 在访问网页的过程中,Browsermob-Proxy会记录所有的网络请求和返回信息。 6. 通过Browsermob-Proxy提供的API,你可以获取所有的网络请求和返回信息,包括请求的URL、请求方法、请求头、请求参数、返回状态码、返回头和返回内容等。 7. 根据你的需要,对获取到的网络请求和返回信息进行处理和分析。 下面是一个使用SeleniumBrowsermob-Proxy获取网络请求的示例代码: ```python from selenium import webdriver from browsermobproxy import Server # 启动Browsermob-Proxy服务器 server = Server("/path/to/browsermob-proxy") server.start() proxy = server.create_proxy() # 创建Selenium WebDriver对象,并设置代理 chrome_options = webdriver.ChromeOptions() chrome_options.add_argument("--proxy-server={0}".format(proxy.proxy)) driver = webdriver.Chrome("/path/to/chromedriver", options=chrome_options) # 设置代理请求过滤规则,可以根据需要进行设置 proxy.new_har("capture", options={"captureHeaders": True, "captureContent": True}) # 使用Selenium访问网页 driver.get("https://www.example.com") # 获取所有的网络请求和返回信息 har = proxy.har for entry in har["log"]["entries"]: request = entry["request"] response = entry["response"] # 在这里可以对请求和返回信息进行处理和分析 # 关闭Selenium WebDriver和Browsermob-Proxy服务器 driver.quit() proxy.close() server.stop() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

上帝De助手

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

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

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

打赏作者

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

抵扣说明:

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

余额充值