Selenium Wire 网络拦截实现方案
Selenium Wire 网络拦截实现方案
目标
在 Robot Framework 中集成 Selenium Wire,实现以下功能:
- 接管已经打开并登录的 Chrome 浏览器
- 
- 在接管状态下执行页面操作(输入、点击等)
 
- 
- 拦截和分析网络请求(特别是 API 请求)
 
实施步骤
1. 环境准备
文件: requirements.txt
- 
添加 selenium-wire>=5.1.0依赖
- 
- 添加 mitmproxy>=9.0.0(Selenium Wire 的底层依赖)
 文件:config.yaml
 
- 添加 
- 
添加 Chrome 调试端口配置 
- 
- 添加 Selenium Wire 代理配置选项
 
2. 创建 Selenium Wire 自定义库
文件: libraries/SeleniumWireLibrary.py(新建)
核心功能包括:
- Attach To Browser: 连接到已打开的 Chrome 浏览器(通过 Remote Debugging)
- 
- Get All Requests: 获取所有网络请求列表
 
- 
- Get Requests By URL Pattern: 根据 URL 模式过滤请求
 
- 
- Wait For Request: 等待特定请求出现
 
- 
- Get Request Details: 获取请求详细信息(URL、Method、Headers、Body)
 
- 
- Get Response Details: 获取响应详细信息(Status Code、Headers、Body)
 
- 
- Clear Requests: 清除已记录的请求历史
 
- 
- Set Request Interceptor: 设置请求拦截器(修改请求)
 
- 
- Set Response Interceptor: 设置响应拦截器(修改响应)
 关键技术点:
 
from seleniumwire import webdriver
from selenium.webdriver.chrome.options import Optionsoptions = Options()
options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
driver = webdriver.Chrome(options=options)
3. 创建浏览器启动脚本
文件: start_chrome_debug.bat(新建)
- 
Windows 批处理脚本,以调试模式启动 Chrome 
- 
- 指定调试端口(默认 9222)
 
- 
- 指定用户数据目录以保持登录状态
 文件:start_chrome_debug.sh(新建)
 
- 指定用户数据目录以保持登录状态
- 
Linux/Mac 版本的启动脚本 
4. 创建示例测试用例
文件: testcases/selenium_wire_demo.robot(新建)
示例场景:
- 手动启动 Chrome 并登录某个网站
- 
- 使用 Robot Framework 接管浏览器
 
- 
- 执行页面操作(输入文本、点击按钮)
 
- 
- 捕获并验证产生的 API 请求
 
- 
- 断言请求参数和响应数据
 
5. 更新资源文件
文件: resources/common.robot
- 添加常用的 Selenium Wire 关键字封装
- 
- 创建统一的浏览器接管和清理流程
 
6. 创建实用工具关键字
在 SeleniumWireLibrary.py 中添加:
- 请求日志格式化输出
- 
- JSON 响应体解析
 
- 
- 请求/响应保存到文件
 
- 
- 性能统计(请求耗时分析)
 
技术架构
Robot Framework Test↓SeleniumWireLibrary (自定义库)↓Selenium Wire (网络拦截层)↓Chrome (Remote Debugging 模式)↓目标网站```
## 使用流程1. **启动调试模式浏览器**:运行 `start_chrome_debug.bat`
2. 2. **手动登录**:在打开的浏览器中访问网站并登录
3. 3. **运行测试**:执行 Robot Framework 测试用例
4. 4. **自动接管**:测试脚本自动连接到已打开的浏览器
5. 5. **执行操作**:进行页面交互和网络请求分析
## 注意事项- Chrome 调试模式只能被一个客户端连接,测试期间不要关闭浏览器
- - HTTPS 网站首次访问可能需要信任 Selenium Wire 的证书
- - 网络请求会持续累积,建议定期调用 `Clear Requests` 清理
- - 某些网站可能检测代理,需要配置 `disable_capture` 选项排除特定域名
