Selenium UnreachableBrowserException - Java

Posted

技术标签:

【中文标题】Selenium UnreachableBrowserException - Java【英文标题】: 【发布时间】:2018-11-30 10:57:48 【问题描述】:
System.setProperty("webdriver.chrome.driver","D:/chromedriver.exe");
        WebDriver driver = new ChromeDriver();   
        driver.navigate().to("https://link");
        driver.findElement(By.cssSelector("#username")).sendKeys("id");
        driver.findElement(By.cssSelector("#password")).sendKeys("pass");
        driver.findElement(By.cssSelector("#clientName")).sendKeys("name");
        driver.findElement(By.cssSelector("#submitButton")).click();
        System.out.println("Okay !");

我为 Chrome 驱动程序设置了属性。当我运行它给出一个错误。 (下)我搜索了很多,但没有找到任何解决方案。

Starting ChromeDriver 2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab) on port 10589
Only local connections are allowed.
Exception in thread "main" org.openqa.selenium.remote.UnreachableBrowserException: Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure.
Build info: version: '3.12.0', revision: '7c6e0b3', time: '2018-05-08T15:15:03.216Z'
System info: host: 'DESKTOP-9HVORCR', ip: '192.168.1.24', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_171'
Driver info: driver.version: ChromeDriver
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:564)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:207)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:130)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:181)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:168)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:123)
    at zaaa.main.main(main.java:11)
Caused by: java.lang.IllegalArgumentException: Unexpected char 0x131 at 23 in User-Agent value: selenium/3.12.0 (java wındows)
    at okhttp3.Headers$Builder.checkNameAndValue(Headers.java:338)
    at okhttp3.Headers$Builder.add(Headers.java:288)
    at okhttp3.Request$Builder.addHeader(Request.java:177)
    at org.openqa.selenium.remote.internal.OkHttpClient.execute(OkHttpClient.java:85)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:101)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:73)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:136)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:543)
    ... 6 more

我试过这些:

    32/64 位驱动程序。 以管理员身份运行。 创建 Try/Catch 块。 其他驱动程序。 (如 Operadriver.exe)(结果:同样的错误)

【问题讨论】:

路径中有非法字符。由于它在另一台计算机上运行良好,我假设它在计算机名称中。 我也尝试了其他字符“\\”“/”。这与路径无关,因为 IDE 会在开始时找到驱动程序并运行。检查错误代码的顶部:在端口 10589 上启动 ChromeDriver 2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab) 只允许本地连接。 这与您在代码中编写的内容无关。 Selenium 使用机器信息,包括计算机名称。我猜问题就在那里。 我刚改了,结果一样。在端口 4892 上启动 ChromeDriver 2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab) 只允许本地连接。线程“主”org.openqa.selenium.remote.UnreachableBrowserException 中的异常:无法启动新会话。可能的原因是远程服务器地址无效或浏览器启动失败。构建信息:版本:'3.12.0',修订:'7c6e0b3',时间:'2018-05-08T15:15:03.216Z' 系统信息:主机:'SUPPLYCHAIN',ip:'192.168.1.24',操作系统。名称:'Windows 10',os.arch:'amd64',os.version:'10.0',java.version:'1.8.0_171' 您的 ChromeDriver 浏览器版本?使用客户端 jar 还是独立 jar? 【参考方案1】:

我认为你的窗户不是英文的。我有同样的问题。当我在英文版 Windows 10 中尝试相同时,代码可以正常工作。

【讨论】:

Locale.setDefault(new Locale("tr", "TR")); 应该可以工作。 这不是问题的答案。请看下面我的回答。我改变了这个问题的原因,我的拉取请求被接受了。 Selenium 的下一个版本应该没问题。【参考方案2】:
Locale.setDefault(new Locale("en", "EN"));

你也可以试试这个。它对我有用。

【讨论】:

【参考方案3】:

在实例化“WebDriver driver = new ChromeDriver();”之前添加这些行

ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--no-sandbox");

然后在你声明 Webdriver 的地方添加参数,如下所示:-

WebDriver driver = new ChromeDriver(chromeOptions);

希望对你有帮助。

【讨论】:

我对 Opera 和 IE 也有同样的问题。我有两台电脑,但我用这台电脑工作。安装相同的程序和版本。我已经尝试过 Netbeans 和 Eclipse。所有驱动程序都有相同的错误。这可能与代码无关。代码在其他计算机上运行良好。 这个错误信息的原因是“可能的原因是远程服务器的地址无效或浏览器启动失败”。您可以尝试更新 selenium server 独立版本和 chrome 驱动版本,并确保您使用的 IP 地址正确。【参考方案4】:

你在这里使用selenium 版本:3.12.0chromedriver 版本:2.40

当我尝试使用这些配置运行时(目前它们是最新的) 我能够毫无例外地启动应用程序并在日志中获取:

Starting ChromeDriver 2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab) on port 35584
Only local connections are allowed.
Jun 21, 2018 2:42:51 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
Okay !

这与您的起始日志相同。 我的 chrome 浏览器版本是:

Version 67.0.3396.87 (Official Build) (64-bit)

我认为你应该检查你的 .m2 文件夹并删除

.m2\repository\org\seleniumhq\selenium

文件夹,然后再次尝试下载依赖项。

还更新到最新的 chrome 浏览器版本。

希望对你有帮助。

【讨论】:

【参考方案5】:

这是土耳其语 Windows 的问题。正如异常消息中所示,用户代理值“selenium/3.12.0 (java wındows)”中的“ı”字符是异常的原因。 问题是字符串“WINDOWS”被更改为小写,并且由于 TR 语言环境而导致“wındows”。我发现它是在org.openqa.selenium.remote.http.HttpClient类中生成的,并像这样添加了Locale.US

String USER_AGENT = String.format(
      "selenium/%s (java %s)",
      new BuildInfo().getReleaseLabel(),
      (Platform.getCurrent().family() == null ?
          Platform.getCurrent().toString().toLowerCase(Locale.US) :
          Platform.getCurrent().family().toString().toLowerCase(Locale.US)));

我用我的更改编译了库,它现在可以工作了。我还在github上开了一个pull request。

你也可以找到我编辑的 fork here。

【讨论】:

所以我的 pull request 被合并了,这个问题将在 Selenium 的下一个版本中解决。

以上是关于Selenium UnreachableBrowserException - Java的主要内容,如果未能解决你的问题,请参考以下文章

selenium是啥?

Python爬虫 Selenium -- Selenium元素定位Selenium访问元素信息Selenium交互

Selenium学习Selenium 总结

Selenium - 简介

java selenium selenium 介绍

selenium3降版为selenium2