如何使用Selenium(-Wire)获取HTTP响应码?能否无需代理捕获网络响应
使用Selenium(-Wire)获取HTTP响应码的实现方法
基于Selenium-Wire的操作方式
Selenium-Wire会自动拦截浏览器的全量网络请求,无需额外配置抓包规则,直接遍历已捕获的请求对象即可获取对应HTTP响应码:
- 核心逻辑:
- 初始化Selenium-Wire驱动后访问目标页面
- 遍历驱动实例
requests属性下的所有请求条目 - 对存在匹配响应的请求,直接读取
request.response.status_code属性即可拿到对应HTTP响应码
- 可运行示例代码:
from seleniumwire import webdriver # 初始化Chrome驱动 driver = webdriver.Chrome() # 访问目标页面 driver.get("https://example.com") # 遍历提取响应码 for request in driver.requests: if request.response: print(f"请求地址:{request.url},响应码:{request.response.status_code}")
- 实用技巧:可以通过请求的URL、资源类型、请求方法做字段过滤,精准匹配需要统计的目标请求,无需遍历全量请求。
无代理场景下的Selenium网络响应捕获方案
需要明确的是:Selenium-Wire的流量拦截能力本质是通过内置的本地MITM代理实现的,从设计架构上就依赖代理机制完成流量转发与解析。如果需要完全不使用代理捕获Selenium下的网络响应,完全可以实现,无需依赖Selenium-Wire:
- 实现路径:基于原生Selenium提供的CDP(Chrome DevTools Protocol)调试接口,直接从浏览器内核层获取网络事件数据,不存在本地代理转发环节
- 核心操作步骤:
- 初始化原生Selenium驱动后,通过CDP命令执行
Network.enable操作,开启网络域的事件监听 - 注册
Network.responseReceived事件的回调逻辑,事件触发时会同步返回对应请求的响应状态码、响应头等完整元数据 - 触发页面加载、元素交互等操作后,即可在回调逻辑中收集全量网络响应数据
- 初始化原生Selenium驱动后,通过CDP命令执行
- 方案特性:全程不需要启动额外的本地代理进程,不会修改浏览器的代理配置,也不会因为MITM证书信任问题触发浏览器安全告警。
提问者附的参考截图:
内容的提问来源于stack exchange,提问作者cYc2k
相关产品推荐
相关产品推荐

