我一直在尝试使用docker和selenium网格解决RemoteWebDriver和ChromeOptions的一些问题。主要问题与代理有关,但我用代理pac文件(将pac文件网址作为arg传递给ChromeOptions)解决了一半。下面的代码在docker debug中运行良好,并且在本地独立运行,但是一旦我尝试使用网格或部署并使用Bamboo运行,驱动程序就会打开,并且我可以看到由于未使用poxy pac文件而没有通过ChromeOptions,刚刚冻结在org.openqa.selenium.remote.ProtocolHandshake createSession中。我已经研究了几个星期,现在我正对此进行严格的阻止。我看到过一些DesiredCapabilities已过时的帖子,但是我没有找到一种实现ChromeOptions的方法。
ChromeOptions options = new ChromeOptions();
options.addArguments("--start-maximized");
options.addArguments("--disable-infobars");
options.addArguments("--proxy-pac-url= http://ProxyPacURL.com");
DesiredCapabilities dc = DesiredCapabilities.chrome();
dc.setCapability(ChromeOptions.CAPABILITY, options);
driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), dc);
答案 0 :(得分:2)
更新至最新的Selenium Jars,确保您的Java版本为1.8或更高版本,然后由于DesiredCapabilities已弃用,因此可以将ChromeOptions传递到驱动程序中。现在,我可以使用selenium网格运行selenium docker节点,并且所有ChromeOptions参数现在都将传递给容器。
ChromeOptions options = new ChromeOptions();
options.addArguments("--start-maximized");
options.addArguments("--disable-infobars");
options.addArguments("--proxy-pac-url=http://myPacFile.com");
options.addArguments("--no-sandbox");
driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), options);
答案 1 :(得分:0)
试试这个:
const GRID_HOST = 'http://localhost:4444/wd/hub';
var options = new chrome.Options();
options.addArguments("--start-maximized");
options.addArguments("--disable-infobars");
options.addArguments("--proxy-pac-url=http://myPacFile.com");
options.addArguments("--no-sandbox");
driver = new webdriver.Builder()
.usingServer(GRID_HOST)
.forBrowser("chrome")
.setChromeOptions(options)
.build()
答案 2 :(得分:0)
我遇到了同样的问题,我找到了如下解决方案: 我们需要设置“goog:chromeOptions”而不是“chromeOptions”。
在您的 Java 代码中,存在以下行:
dc.setCapability(ChromeOptions.CAPABILITY, options);
如果您导航到 ChromeOptions.CAPABILITY,您会注意到它是一个值为“chromeOptions”的常量。这适用于本地网络驱动程序,但不适用于远程网络驱动程序(即 selenium 网格)。
只需将上面的行更改为:
dc.setCapability("goog:chromeOptions", options);
现在,当您执行 Java 代码时,它会正常工作,您的所有选项也会显示其效果。
我遇到了其他页面,例如 this,其中提到了上述解决方案。