java selenium目前想要监听网络请求和修改响应返回内容BrowserMobProxy代理是一个很好的选择,具体原理可以自行百度代理服务的原理,selenium4的阿尔法版本也开始添加类似的功能了,不过目前不是很完善,代码方面使用起来也很方便,下面直接看代码吧。
BrowserMobProxy在和selenium集成的使用中性能消耗比较大其他方面暂时没有发现其他问题在git上看到有一个2.1.6的版本但是没有上传,目前最新的版本是2.1.5也是2017年的代码了。
package com.watchmen.selenium;
import java.util.List;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import io.netty.handler.codec.http.HttpRequest;
import io.netty.handler.codec.http.HttpResponse;
import net.lightbody.bmp.BrowserMobProxy;
import net.lightbody.bmp.BrowserMobProxyServer;
import net.lightbody.bmp.client.ClientUtil;
import net.lightbody.bmp.core.har.Har;
import net.lightbody.bmp.core.har.HarEntry;
import net.lightbody.bmp.core.har.HarNameValuePair;
import net.lightbody.bmp.core.har.HarRequest;
import net.lightbody.bmp.core.har.HarResponse;
import net.lightbody.bmp.filters.RequestFilter;
import net.lightbody.bmp.proxy.CaptureType;
import net.lightbody.bmp.util.HttpMessageContents;
import net.lightbody.bmp.util.HttpMessageInfo;
/**
*
* @author kk
* @Description selenium使用browserMobProxy代理
*/
public class SeleniumBrowserMobProxy {
public static void main(String[] args) {
String webDriverDir = "浏览器驱动路径";
// 加载驱动
System.setProperty("webdriver.chrome.driver", webDriverDir);
BrowserMobProxy browserMobProxy = new BrowserMobProxyServer();
browserMobProxy.start();
browserMobProxy.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT);
browserMobProxy.setHarCaptureTypes(CaptureType.RESPONSE_CONTENT);
browserMobProxy.newHar("kk");
Proxy seleniumProxy = ClientUtil.createSeleniumProxy(browserMobProxy);
// 设置浏览器参数
ChromeOptions options = new ChromeOptions();
options.setProxy(seleniumProxy);
options.setAcceptInsecureCerts(true);
options.setExperimentalOption("useAutomationExtension", false);
// 创建驱动对象
WebDriver driver = new ChromeDriver(options);
// 监听网络请求
browserMobProxy.addRequestFilter(new RequestFilter() {
@Override
public HttpResponse filterRequest(HttpRequest request, HttpMessageContents contents,
HttpMessageInfo messageInfo) {
// 打印浏览器请求的url和请求头
System.out.println(request.getUri() + " --->> " + request.headers().get("Cookie"));
return null;
}
});
// 打开链接
driver.get("https://www.baidu.com/");
// 获取返回的请求内容
Har har = browserMobProxy.getHar();
List<HarEntry> entries = har.getLog().getEntries();
for (HarEntry harEntry : entries) {
HarResponse response = harEntry.getResponse();
HarRequest request = harEntry.getRequest();
String url = harEntry.getRequest().getUrl();
List<HarNameValuePair> headers = request.getHeaders();
for (HarNameValuePair harp : headers) {
System.out.println(harp.toString());
}
}
}
}
maven依赖
<dependency>
<groupId>net.lightbody.bmp</groupId>
<artifactId>browsermob-core</artifactId>
<version>2.1.5</version>
</dependency>
<dependency>
<groupId>net.lightbody.bmp</groupId>
<artifactId>browsermob-legacy</artifactId>
<version>2.1.5</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.0.0-alpha-7</version>
</dependency>
</dependency>
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理