RSelenium rsDriver 给出错误无法终止退出的进程

RSelenium rsDriver gives error can't kill an exited process

我正在努力让 RSelenium 在 unix 服务器上工作。它有 Mozilla Firefox 60.6.1,和 运行 两个命令:

binman::list_versions("geckodriver")
$linux64
[1] "0.22.0" "0.23.0" "0.24.0"

binman::list_versions("seleniumserver")
$generic
[1] "3.141.59"      "4.0.0-alpha-1" "4.0.0-alpha-2"

geckodriver 似乎可用(是吗?)。但是当我尝试启动驱动程序时:

> library(RSelenium)
> rD <- rsDriver(browser = "firefox",
+          extraCapabilities = list(
+            "moz:firefoxOptions" = list(
+              binary = "/usr/lib64/firefox/firefox",
+              args = list('--headless')
+            )
+          ))
...
[1] "Connecting to remote server"

Selenium message:invalid argument: can't kill an exited process
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:53'
System info: host: 'login2.cluster', ip: '192.168.100.12', os.name: 'Linux', os.arch: 'amd64', os.version: '3.10.0-957.5.1.el7.x86_64', java.version: '1.8.0_181'
Driver info: driver.version: unknown
remote stacktrace:

Could not open firefox browser.
Client error message:
         Summary: UnknownError
         Detail: An unknown server-side error occurred while processing the command.
         Further Details: run errorDetails method
Check server log for further details.

和其他人那里我尝试降级geckodriver的版本,并利用firefox的headless模式:

 rD <- rsDriver(browser = "firefox",
                version = "3.141.59",
                geckover = "0.22.0",
          extraCapabilities = list(
            "moz:firefoxOptions" = list(
              binary = "/usr/lib64/firefox/firefox",
              args = list('--headless')
            )
          ))

但是还是报同样的错误。 我怀疑实际上没有安装 geckodriver。这可能吗 ?如何查看?

感谢您的帮助

您需要严格遵守关于 SeleniumGeckoDriverFirefox 版本的具体要求这将在您的测试框架中使用并完全删除不需要的二进制文件版本。 GeckoDriver v0.24.0必须是最新版本。

Selenium v​​4.0.0-alpha-1Selenium v​​4.0.0-alpha-2alpha 发布并且必须避免用于 生产 用法。所以 Selenium v​​3.141.59 必须是最新版本。

For GeckoDriver, Selenium and Firefox Browser compatibility you can find a detailed discussion in Which Firefox browser versions supported for given Geckodriver version?

注意:您不需要安装 GeckoDriver 二进制文件,但将二进制文件放在所需位置。

所以理想的用法是:

rD <- rsDriver(browser = "firefox",
        version = "3.141.59",
        geckover = "0.24.0",
      extraCapabilities = list(
        "moz:firefoxOptions" = list(
          binary = "/usr/lib64/firefox/firefox",
          args = list('--headless')
        )
      ))

如果问题仍然存在,请按照以下步骤操作。


这个错误信息...

message:invalid argument: can't kill an exited process

...可以出于不同的原因浮出水面。可能的解决方案可以是以下 any/either 个:

  • 确保 GeckoDriver v0.24.0 已下载并放置在您的路径中已有的目录中,例如/usr/local/bin
  • 确保 GeckoDriver非 root 用户具有可执行权限。
  • 确保 firefox (> v57.0) 按照您的代码在 /usr/lib64/firefox/ 目录中安装(强制)块,版本兼容。
  • 确保如果你是 运行 Firefox无显示 的系统上你必须使用 无头模式.
  • headless 模式GeckoDriver v0.24.0 的正确用法是:

    options.headless = True
    
  • 如果你设置MOZ_HEADLESS=1就不再需要xvfb-run了:

    $ export MOZ_HEADLESS=1   # this way you only have to set it once
    
  • 如果您更改了系统路径,请系统重启

  • 始终在 tearDown(){} 方法中调用 driver.quit() 以优雅地关闭和销毁 WebDriverWeb Client 实例.
  • 始终以 非 root 用户身份执行您的 @Tests

参考资料

您可以在以下位置找到相关的详细讨论: