当前位置: 首页 > 面试题库 >

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

司空瑾瑜
2023-03-14
问题内容

我正在努力使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的无头模式:

 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

对于 GeckoDriverSeleniumFirefox浏览器的
兼容性,您可以找到详细的讨论:给定的Geckodriver版本支持哪些Firefox浏览器版本?

注意 :您不需要安装 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 用户具有可执行权限。
  • 确保根据您的代码块在目录内安装(强制性) firefox (> v57.0), /usr/lib64/firefox/ 并且该版本兼容。
  • 确保如果在 没有显示* 的系统上运行 Firefox ,则必须使用 无头模式* __
  • 正确使用 无头模式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
    
  • 如果您更改了系统路径,请执行 System Reboot

  • 始终driver.quit()tearDown(){}方法内调用以优雅地关闭和销毁 WebDriverWeb Client 实例。

  • 始终以 非root* 用户身份执行 @Tests*

参考资料

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

  • WebDriverException:消息:无效参数:无法在RaspberryPi3上使用GeckoDriver,Selenium和Python杀死已退出的进程


 类似资料:
  • 在python文件“/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py”第321行中,在execute self.error_handler.check_response(响应)文件“/usr/local/lib/python3.6/dist-packages/selenium/webdrive

  • 我在java中创建Thread,我想杀死或销毁或退出它并再次重新启动相同的线程。有一些属性可以杀死或销毁线程,但现在已弃用。这可能是相同的线程代码 `任何帮助都将不胜感激

  • 我采取的mysql备份从一个Linux环境使用下面的命令,docker exec CONTAINER /usr/bin/mysqldump-u root--word=root DATABASE 然后我尝试使用下面的命令将上面的sql转储还原到另一个Linux环境,cat备份.sql |Docker exec -i CONTAINER /usr/bin/mysql -u root --passwor

  • 问题内容: 我需要搜索某个进程并杀死该进程。我写了这样的命令: 进程名称为。但这是行不通的。我如何才能按名称及其名称查找流程。 问题答案:

  • 问题内容: 我无法杀死或停止任何泊坞窗容器。我已允许非特权用户运行Docker命令。并且工作正常。但是我无法停止其他任何容器。 我得到了: 与sudo相同的错误。同时,所有容器都可以成功运行,但是要停止它们,只能完全重新引导系统。 Docker撰写示例:#使用postgres / example用户/密码凭证版本:“ 3.1” Docker信息: 问题答案: AppArmor(应用程序装甲)是Li

  • 我正在尝试应用biopython代码来分割一个大的fasta文件。代码如下所示: 在这一行中:对于i,枚举中的批处理(批处理迭代器(record_iter,93)):正在给我语法错误:无效语法。但是我看不到错误,有人能帮我找到吗?我从这里取了密码http://biopython.org/wiki/Split_large_file谢谢