【问题标题】:How to setup proxy for chrome in selenium : Java如何在 selenium 中为 chrome 设置代理:Java
【发布时间】:2017-07-27 00:59:30
【问题描述】:

我已经为 PhantomJS 设置了代理,并使用以下代码验证了 IP 地址。它工作正常。

这里的主机名是IP地址:43.19.196.36

DesiredCapabilities capabilities = DesiredCapabilities.phantomjs();
capabilities.setJavascriptEnabled(true);
System.setProperty("phantomjs.binary.path", "../Drivers/phantomjs.exe");

ArrayList<String> cliArgsCap = new ArrayList<String>();
cliArgsCap.add("--proxy=hostname:port");
cliArgsCap.add("--proxy-auth=username:password");
cliArgsCap.add("--proxy-type=http");
capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, cliArgsCap);

driver = new PhantomJSDriver(capabilities);

driver.get("http://api.ipify.org/");
logger.info("IP Address: " + Jsoup.parse(driver.getPageSource()).body().text());

此代码运行良好,我的应用程序正在使用代理地址。

2017-07-24 16:37:47 INFO  ElectoralRoll:81 - IP Address: 42.10.197.10

但是,如何为 chrome 设置相同的代理?这是我的代码。它打印我的 IP 地址。它没有使用代理。

Proxy proxy = new Proxy();

proxy.setHttpProxy("hostname:port");
proxy.setFtpProxy("hostname:port");
proxy.setSslProxy("hostname:port");
proxy.setSocksUsername("username");
proxy.setSocksPassword("password");

capabilities.setCapability(CapabilityType.PROXY, proxy);

这会打印出我的 IP 地址:

2017-07-24 16:37:47 INFO  ElectoralRoll:81 - IP Address: 

我也试过这个。但是没有用。

capabilities.setCapability("chrome.switches", Arrays.asList("--proxy-server=http://username:password@hostname:port"));

参考: https://stackoverflow.com/a/19225780/8329042

编辑:我添加了:(@Riaz 的回答)

proxy.setProxyType(ProxyType.MANUAL);

在我的代码中使用它,它说:

2017-07-26 20:22:03 INFO  ElectoralRoll:83 - IP Address: proxy authorization required

【问题讨论】:

    标签: java google-chrome selenium proxy


    【解决方案1】:

    尝试查看代码here。特别是这些位:

    proxy.setProxyType(ProxyType.MANUAL);
    
    capability.setCapability(CapabilityType.PROXY, proxy);
    

    我不知道 Chrome 有什么特殊需求才能让它工作,所以它可能是一些基本的东西。

    【讨论】:

      【解决方案2】:

      使用 Chrome 的基本身份验证似乎存在问题。

      所以我已将我的 IP 地址添加到 Proxymesh Dashboard 中的“经过身份验证的 IP 或主机名”。这样我就绕过了用户名和密码验证。

      Proxy proxy = new Proxy();
      proxy.setHttpProxy("hostname:port");
      proxy.setFtpProxy("hostname:port");
      proxy.setSslProxy("hostname:port");
      // proxy.setSocksUsername("username");
      // proxy.setSocksPassword("password");
      proxy.setAutodetect(false);
      proxy.setProxyType(ProxyType.MANUAL);
      capabilities.setCapability(CapabilityType.PROXY, proxy);
      

      有了这个,我可以使用 chrome 使用代理。此解决方案特定于 ProxyMesh 提供程序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-30
        • 1970-01-01
        • 2019-01-19
        • 1970-01-01
        • 1970-01-01
        • 2015-07-29
        • 2016-12-02
        • 1970-01-01
        相关资源
        最近更新 更多