如何使用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
相关产品推荐
相关产品推荐

