关闭

java+selenium使用BrowserMobProxy代理

发表于:2024-2-19 09:26

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:fx9590    来源:CSDN

  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),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号