You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Selenium Java读取HTTP响应体与API响应JSON消息体?

用Java + Selenium 提取API响应消息体并解析JSON

1. 提取响应消息体

如果你已经通过Chrome DevTools Protocol(CDP)捕获到了API响应对象,直接调用Network.getResponseBody命令就能拿到消息体字符串:

// 假设你已通过Network.responseReceived事件拿到了response实例
String responseBody = driver.executeCdpCommand("Network.getResponseBody", 
    Map.of("requestId", response.getRequestId())).get("body").toString();

注:如果响应是gzip压缩格式,该命令会自动完成解压,无需额外处理。

2. 解析JSON格式的消息体

拿到字符串后,推荐用Jackson或Gson这类成熟的JSON库解析,以下是两种库的示例:

用Jackson解析

先添加Maven依赖

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>

解析代码

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

// 初始化解析器
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(responseBody);

// 提取单个字段,比如获取"message"内容
String messageContent = jsonNode.get("message").asText();

// 遍历数组类型字段
JsonNode dataArray = jsonNode.get("data");
for (JsonNode item : dataArray) {
    String itemId = item.get("id").asText();
    // 按需处理每个数组元素
}

用Gson解析

先添加Maven依赖

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>

解析代码

import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

JsonObject jsonObject = JsonParser.parseString(responseBody).getAsJsonObject();
String messageContent = jsonObject.get("message").getAsString();

3. 完整流程示例(捕获+解析)

import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.v118.network.Network;
import java.util.Map;
import java.util.Optional;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class ApiResponseHandler {
    public static void main(String[] args) {
        ChromeDriver driver = new ChromeDriver();
        DevTools devTools = driver.getDevTools();
        devTools.createSession();

        // 启用网络监听
        devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));

        // 监听目标API的响应
        devTools.addListener(Network.responseReceived(), response -> {
            String apiUrl = response.getResponse().getUrl();
            // 过滤你需要捕获的API接口
            if (apiUrl.contains("/api/target-endpoint")) {
                // 获取响应体
                String body = driver.executeCdpCommand("Network.getResponseBody",
                        Map.of("requestId", response.getRequestId())).get("body").toString();
                
                // 解析并提取字段
                try {
                    ObjectMapper objectMapper = new ObjectMapper();
                    JsonNode jsonNode = objectMapper.readTree(body);
                    System.out.println("API响应消息:" + jsonNode.get("message").asText());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

        // 触发API请求的页面操作
        driver.get("https://your-target-site.com");

        driver.quit();
    }
}

注意事项

  • 确保Selenium版本与ChromeDriver、浏览器版本匹配,CDP命令版本(如示例中的v118)需对应浏览器版本
  • 若仅需发送API请求并解析响应,优先使用OkHttp、RestAssured这类HTTP客户端工具,Selenium更适合捕获浏览器主动触发的API请求

内容的提问来源于stack exchange,提问作者Himani Chawla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 05:18:19