如何使用Selenium 4 Chrome DevTools(Java)获取网络请求Payload
使用Selenium 4 Chrome DevTools获取网络请求Payload(Java版)
前置要求
- Selenium Java版本 ≥ 4.0
- ChromeDriver版本与本地Chrome浏览器版本严格匹配
- Maven项目已配置Selenium依赖
Maven依赖配置
在pom.xml中添加以下依赖:
<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.15.0</version> <!-- 替换为最新稳定版 --> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-devtools-v119</artifactId> <!-- 版本需对应Chrome浏览器大版本,比如Chrome 119就用v119 --> <version>4.15.0</version> </dependency>
核心实现代码
以下是完整的示例代码,演示如何监听并获取网络请求的Payload:
import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.devtools.DevTools; import org.openqa.selenium.devtools.v119.network.Network; import org.openqa.selenium.devtools.v119.network.model.Request; import java.util.Optional; public class NetworkPayloadCapture { public static void main(String[] args) { // 初始化ChromeDriver ChromeDriver driver = new ChromeDriver(); // 获取DevTools实例并创建会话 DevTools devTools = driver.getDevTools(); devTools.createSession(); // 启用Network域,开启网络监听 devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty())); // 监听请求发送事件,捕获Payload devTools.addListener(Network.requestWillBeSent(), requestEvent -> { Request request = requestEvent.getRequest(); String url = request.getUrl(); // 过滤目标请求(替换为你的目标接口路径) if (url.contains("your-target-api")) { String payload = request.getPostData(); if (payload != null) { System.out.println("目标请求URL: " + url); System.out.println("请求Payload内容: " + payload); // 若为JSON格式,可自行添加解析逻辑 // ObjectMapper objectMapper = new ObjectMapper(); // JsonNode jsonPayload = objectMapper.readTree(payload); } } }); // 执行触发网络请求的操作(比如打开目标页面) driver.get("https://your-target-site.com"); // 等待请求完成(按需调整等待时间) try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } // 关闭资源 driver.quit(); } }
关键说明
Network.enable():必须先启用Network域,才能监听各类网络事件Network.requestWillBeSent():该事件在请求即将发送时触发,包含完整的请求元数据request.getPostData():直接获取文本格式的请求Payload,仅适用于POST/PUT等带请求体的请求- 若Payload为二进制格式,可使用
request.getPostDataBytes()获取字节数组处理 - 通过
request.getUrl()过滤请求,避免捕获无关的网络请求
内容的提问来源于stack exchange,提问作者Lingam Praveen
相关产品推荐
相关产品推荐

