Webdriver BiDi替代DevTools:如何获取请求与响应体?
Webdriver BiDi 获取请求与响应体方案
Webdriver BiDi 完全支持通过BeforeRequestSent获取请求体、通过ResponseReceived(对应你提到的ResponseDetails)获取响应体,不过得注意API的正确用法,你给出的示例代码存在异步处理的问题,下面是具体说明和修正方案:
请求体获取(BeforeRequestSent事件)
BeforeRequestSent事件本身不会主动返回完整请求体,你示例里调用的getBody()、getRequest().getRequestBody()基本都会返回null——这些字段仅在极小体积的POST请求中可能被附带,且不同语言绑定的实现逻辑有差异。- 正确的做法是调用
network.getRequestBody(requestId)方法,但这个方法是异步的,直接打印会得到Future对象而非实际内容,需要等待异步结果返回。
修正后的Java示例代码:
network.onBeforeRequestSent(request -> { // 异步获取请求体 CompletableFuture<RequestBody> bodyFuture = network.getRequestBody(request.getRequest().getRequestId()); // 同步等待结果(也可用thenAccept做异步处理) RequestBody requestBody = bodyFuture.join(); if (requestBody != null) { // 处理文本格式的请求体(如JSON、表单) if (requestBody.getText() != null) { System.out.println("请求体文本:" + requestBody.getText()); } // 处理二进制格式的请求体(如文件上传) if (requestBody.getBytes() != null) { System.out.println("请求体字节序列:" + Arrays.toString(requestBody.getBytes())); } } });
响应体获取(ResponseReceived事件)
- 和请求体逻辑类似,
ResponseReceived事件不会直接携带响应体,必须调用network.getResponseBody(requestId)来拉取内容。
Java示例代码:
network.onResponseReceived(response -> { CompletableFuture<ResponseBody> bodyFuture = network.getResponseBody(response.getResponse().getRequestId()); ResponseBody responseBody = bodyFuture.join(); if (responseBody != null) { // 处理文本格式响应体 if (responseBody.getText() != null) { System.out.println("响应体文本:" + responseBody.getText()); } // 处理二进制格式响应体(如图片、压缩包) if (responseBody.getBytes() != null) { System.out.println("响应体字节序列:" + Arrays.toString(responseBody.getBytes())); } } });
关键注意事项
- BiDi API启用前提:确保你的浏览器版本支持(Chrome 102+、Firefox 115+),初始化Driver时要开启BiDi:
ChromeOptions options = new ChromeOptions(); options.addArguments("--enable-bidi"); ChromeDriver driver = new ChromeDriver(options); // 获取BiDi实例和Network模块 BiDi bidi = driver.getBiDi(); Network network = bidi.getNetwork();
- 大体积内容配置:如果需要获取大体积的请求/响应体,要提前通过
network.enable()设置不限制大小:
network.enable(new EnableParameters().setMaxResponseBodySize(-1)); // -1表示无限制
内容的提问来源于stack exchange,提问作者bog bogishvili
相关产品推荐
相关产品推荐

