Selenium4 增加了重要的功能就是DevTools,比如以前想要获取Request信息和Response信息比较麻烦,有了DevTools使用很简洁的api就能获取到了。没有DevTools之前想要获取Request信息和Response信息参照我的另一篇文章java selenium使用BrowserMobProxy代理需要依赖第三方组件,现在不用了,下面看代码吧。
import java.util.Optional;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.HasDevTools;
import org.openqa.selenium.devtools.v101.network.Network;
import org.openqa.selenium.remote.Augmenter;
import org.openqa.selenium.devtools.v101.network.model.Response;
/**
* @author kk
* @Description Selenium DevTools功能演示
*/
public class SeleniumDevTools {
public static void main(String[] args) throws InterruptedException {
String webDriverDir = "浏览器驱动路径";
// 加载驱动
System.setProperty("webdriver.chrome.driver", webDriverDir);
// 创建驱动对象
WebDriver driver = new ChromeDriver();
driver = new Augmenter().augment(driver);
DevTools devTools = ((HasDevTools) driver).getDevTools();
devTools.createSession();
devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));
// 获取Request信息
devTools.addListener(Network.requestWillBeSent(), res -> {
System.out.println("RequestHeaders:" + res.getRequest().getHeaders());
System.out.println("RequestHeaders:" + res.getRequest().getUrl());
});
// 获取Response信息
devTools.addListener(Network.responseReceived(), res -> {
System.out.println("ResponseHeaders:" + res.getResponse().getHeaders());
System.out.println("ResponseURL:" + res.getResponse().getUrl());
});
driver.get("https://www.baidu.com/");
// 获取Response响应内容
devTools.addListener(Network.responseReceived(), res -> {
Response response = res.getResponse();
String url = response.getUrl();
System.out.println("url:" + url);
// 获取network 请求的responseBody
String responseBody = devTools.send(Network.getResponseBody(res.getRequestId())).getBody();
});
driver.get("https://www.baidu.com/");
TimeUnit.MILLISECONDS.sleep(4500);
}
}
运行之后可以到看,Request信息和Response信息了,代码已经提交git仓库地址是演示代码git仓库地址