RSelenium rsDriver给出错误,无法杀死退出的进程

时间:2019-08-15 07:18:39

标签: r selenium firefox geckodriver rselenium

我正在努力使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"

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

> 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.

this question和其他版本开始,我试图降级geckodriver的版本,并使用无头模式的Firefox:

 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。这可能吗 ?如何检查?

谢谢您的帮助

1 个答案:

答案 0 :(得分:1)

您需要遵守有关在测试框架中使用的 Selenium GeckoDriver Firefox 版本的确切要求,并删除完全不需要的二进制文件版本。必须选择最新版本的 GeckoDriver v0.24.0

硒v4.0.0-alpha-1 硒v4.0.0-alpha-2 alpha 版本,对于<强大的>生产用法。因此,必须选择最新版本的 Selenium v​​3.141.59

  

关于 GeckoDriver Selenium Firefox浏览器的兼容性,您可以在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

...由于不同的原因会浮出水面。可能的解决方案可以是以下任意一种:

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

    options.headless = True
    
  • 如果您按照以下方式设置xvfb-run,则不再需要MOZ_HEADLESS=1

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

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

参考

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