java selenium使用BrowserMobProxy代理

本文介绍了如何在Selenium 4中集成BrowserMobProxy,实现网络请求的监听和响应内容的修改,通过实例展示了如何配置代理、设置过滤器并获取Har日志。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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>
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值