我可以使用BrowserMob创建一个Selenium代理,一切都在我的本地PC上运行良好。当我在服务器(Windows Server 2008 R2 Standard)上运行相同的代码时,它会错误地“无法连接到隧道”。
我尝试了不同的Chrome浏览器组合,例如--ignore-certificate-errors, - user-data-dir = C:/ temp / insecurechrome, - ignore-certificate-errors。我确保设置.setTrustAllServer(true)。我试过调整Windows Firewal没有任何影响。
我将添加我正在使用的代码,但是,它可以在我的本地PC上运行,但不能在服务器上运行。我希望有人可以建议服务器上的其他设置我可以更换或我可能错过的代码中的某些内容。
我首先收到Chrome浏览器消息:代理隧道。几秒钟后(15-20)。我收到错误:ERR_TUNNEL_CONNECTION_FAILED。
browserMobProxyServer = new BrowserMobProxyServer();
browserMobProxyServer.setTrustAllServers(true);
browserMobProxyServer.start(0);
port = browserMobProxyServer.getPort();
seleniumProxy = ClientUtil.createSeleniumProxy(browserMobProxyServer);
ChromeOptions options = new ChromeOptions();
options.addArguments("--proxy-server","--ignore-certificate-errors","--user-data-dir=C:/temp/insecurechrome");
Map<String, Object> prefs = new HashMap<String, Object>();
prefs.put("credentials_enable_service", false);
prefs.put("profile.password_manager_enabled", false);
options.setExperimentalOption("prefs", prefs);
PropertyConfigurator.configure("./resources/properties/log4j.properties");
DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
desiredCapabilities.setCapability(ChromeOptions.CAPABILITY, options);
desiredCapabilities.setCapability(CapabilityType.PROXY, seleniumProxy);
//desiredCapabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true); //Has no effect
driverService = new ChromeDriverService.Builder().usingDriverExecutable(new File("./resources/driver/chromedriver.exe")).usingPort(Integer.parseInt(portRequested)).build();
driverService.start();
return new ChromeDriver((ChromeDriverService)driverService, desiredCapabilities);
答案 0 :(得分:0)
我能够找出自己的问题。有一个现有的公司代理拦截了流量。此代理具有不同的服务器和用户协议。在我的电脑上运行时运行正常。在服务器上运行我的程序时,我需要解决代理转发或链接问题。我通过在上面的代码中添加以下行来完成此操作:
import java.net.InetSocketAddress; ... ...
InetSocketAddress x = new InetSocketAddress(“proxy.example.com”,80); browserMobProxyServer.setChainedProxy(X);