当前位置: 首页 > 知识库问答 >
问题:

使用ChromeDriver设置browsermob代理

爱琪
2023-03-14

我正在尝试将browsermob设置为在我的selenium项目中工作。我正在寻找一种使用ChromeOptions来设置代理的方法,但是所有的资源都告诉我要使用ChromeOptions来处理其他的事情,然后在实例化一个新的ChromeDriver实例之前将它转换为DesiredCapabilities。

这是我的代码:

ChromeOptions options = new ChromeOptions();
// Setting some chrome features here

ProxyServer proxyServer = new ProxyServer(4444);
proxyServer.start();

Proxy proxy = proxyServer.seleniumProxy();

DesiredCapabilities capabilities = DesiredCapabilities.chrome();

capabilities.setCapability(ChromeOptions.CAPABILITY, options);
capabilities.setCapability(CapabilityType.PROXY, proxy);

WebDriver driver = new ChromeDriver(capabilities); // Error happens here

我使用的是maven存储库中的Webdriver版本2.44。这是我得到的错误:

java.lang.IllegalAccessError: tried to access field com.google.gson.JsonNull.INSTANCE from class org.openqa.selenium.remote.BeanToJsonConverter

有没有人知道将代理连接到ChromeDriver的原因或其他解决方案?

共有2个答案

钱星华
2023-03-14

ChromeDriver不直接支持代理caps。但它支持将命令行参数传递给chrome进程。而设置http代理是chrome命令行开关之一。可按如下方式设置:

DesiredCapabilities caps = DesiredCapabilities.chrome();    
ArrayList<String> switches = new ArrayList<String>();    
switches.add("--proxy-server=localhost:8080");    
caps.setCapability("chrome.switches", switches);    
webDriver = new ChromeDriver(caps);    
李星波
2023-03-14

如果您使用的是较旧版本的browsermob-proxy,那么Selenium的依赖项和BMP的依赖项之间可能会有一些冲突。我建议使用最新的Selenium+从Master构建最新的BrowserMob代理。

一旦你有了最新的版本,你应该可以使用Chrome+BMP“通常”的方式:

        BrowserMobProxy proxy = new BrowserMobProxyServer();
        proxy.start(); // can specify a port here if you like

        // get the selenium proxy object
        Proxy seleniumProxy = ClientUtil.createSeleniumProxy(proxy);

        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability(CapabilityType.PROXY, seleniumProxy);

        // if chromedriver isn't on your system path, you'll need to set this system property
        System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
        WebDriver driver = new ChromeDriver(capabilities);

        driver.get("https://www.google.com/");
 类似资料:
  • 问题内容: 我正在使用Python和Selenium库编写一个测试套件。使用chromedriver,我使用以下命令设置代理: 当代理没有身份验证时,这可以正常工作。但是,如果代理要求您 使用用户名和密码登录, 则它将不起作用。使用add_argument或其他方法将代理身份验证信息传递给chromedriver的正确和正确方法是什么? 视为: 用另一种语言 它的Firefox,而不是铬。 --p

  • 问题内容: 我有一个运行在端口9091上的browsermob代理。我试图使用browsermob-proxy REST API设置自定义标头。当我通过代理使用Selenium向我的应用程序发出请求时,我的应用程序控制台中没有显示标题。下面是我的代码。请求主体基于此处的文档。我的要求是针对此特定用例使用BrowserMob代理API而不是其Java库。我在下面的代码中做错了什么? 编辑1 我尝试了

  • 问题内容: 我下载了ChromeDriver,默认情况下,浏览器语言为英语,我需要将其更改为西班牙语,但我一直无法使用。 问题答案: 您可以通过添加Chrome的命令行开关 “ –lang”来实现。 基本上,所有你需要开始与ChromeOption说法,见API的详细信息。 以下是有关如何使用Selenium以西班牙语启动Chrome的C#代码的工作示例。 Java代码应该几乎相同(未经测试)。请

  • 我开始在Selenium上写一些测试,并认为如果我能在登录我们的网站时获得性能指标,那就太好了。我遇到了BrowserMob-Proxy。我开始从Lightbody的github页面复制前五行,我已经得到了错误消息:“ProxyServer无法解析为类型”和“代理无法解析为类型”。 谁能告诉我这里还缺什么吗? 这是pom。xml: 在这个类中,我试图让方法“开始”和“结束”(“开始”还没有完成,我

  • 问题内容: 我想为browsermob配置上游代理,最好从python或shell脚本中以编程方式配置。 它看起来不像browsermob的python绑定包含了上游代理配置命令或方法。我可以使用另一种方法吗? 问题答案: python绑定实际上确实允许您配置上游代理。使用创建代理时,可以将的值设置为上游代理的IP地址和端口(有关详细信息,请参见create_proxy上的参数)。

  • Appium 支持对基于 Chrome 内核的 H5 应用(混合应用)或者网页(Chrome 中的网页或者内建的浏览器中的网页)进行自动化。Appium 管理维护着一个 Chromedriver 实例,当需要的时候,使用代理模式,将命令传递给这个实例。这和最新版本的 Chromedriver是绑定的。我们可以通过 npm 包来安装appium-chromedriver。(Github: appiu