Selenium+Browsermob-Proxy 爬虫-获取浏览器Network请求和响应
前言:
selenium + webdriver虽然能够定位DOM元素、操作网页、获取网页等,但是 Selenium 只能处理“结果”,它无法得知浏览器请求的数据接口信息。若是能够像浏览器 Network 那样获取所有接口的请求和返回信息,就能够获取一些关键信息。
本文使用BrowserMob-Proxy 来解决这个问题。 使用 webdriver 通过 proxy 访问网络,再收集 proxy 端的请求和返回内容,从而获取到数据,而这个 proxy 就类似于 fiddler 抓包软件。
1、安装Browsermob-Proxy
(1)、直接到项目的github上下载打好的压缩包即可:https://github.com/lightbody/browsermob-proxy/releases ,支持Linux和Windows。
proxy-2.1.4百度网盘下载地址
链接:https://pan.baidu.com/s/1PBP8Er-uDN3VKfxz9ppOhg
提取码:zgul
(2)、安装对应的python包:
pip install browsermob-proxy
(3)、安装java8环境
安装java8环境参考:https://blog.csdn.net/JunLeon/article/details/122623465
相关资源下载 jdk-8u321-windows-x64
链接:https://pan.baidu.com/s/1twaprZ0gG0PY15gRFU87Sg
提取码:trf4
(4)、Selenium安装
参考:https://blog.csdn.net/wg2627/article/details/119282094
2、实战
这里以 百度 为例。使用 Selenium + Webdriver + Browsermob-Proxy 获取接口返回的数据。
from browsermobproxy import Server
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
from pprint import pprint
server = Server("D:\\browsermob-proxy-2.1.4\\bin\\browsermob-proxy.bat") #路径文件
server.start()
proxy = server.create_proxy()
chrome_options = Options()
chrome_options.add_argument('--proxy-server={0}'.format(proxy.proxy))
chrome_options.add_argument('--ignore-certificate-errors')
driver = webdriver.Chrome(chrome_options=chrome_options)
# 要访问的地址
base_url = "https://www.baidu.com/"
proxy.new_har("html", options={'captureHeaders': True, 'captureContent': True}) #html随意取名
driver.get(base_url) #此处最好暂停几秒等待页面加载完成,不然会拿不到结果
time.sleep(3)
result = proxy.har
pprint(result) #显示
server.stop()