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

时间:2018-09-27 10:16:09

标签: python selenium firefox raspberry-pi3 geckodriver

服务器:Raspberry Pi 3
操作系统:Dietpi-版本159
壁虎驱动程序版本:手臂0.22
Firefox版本:52.9.0
Python版本:3.5
硒版本:3.14.1

Gecko是可执行文件,位于/ usr / local / bin /

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.firefox.options import Options
import time



options = Options()
options.set_headless(headless=True)
driver = webdriver.Firefox(firefox_options=options)

print('Need your login credential')
username = input('What is your username?:\n')
password = input('What is your password?:\n')
...
...

输出:

root@RPi3:~# python3.5 ITE-bot.py 
Traceback (most recent call last):
  File "ITE-bot.py", line 12, in <module>
    driver = webdriver.Firefox(firefox_options=options)
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/firefox/webdriver.py", line 174, in __init__
    keep_alive=True)
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: invalid argument: can't kill an exited process

有什么想法吗?我没有运气就尝试过Google。

12 个答案:

答案 0 :(得分:16)

此错误消息...

selenium.common.exceptions.WebDriverException: Message: invalid argument: can't kill an exited process

...表示 GeckoDriver 无法启动/产生新的 WebBrowsing会话,即 Firefox浏览器会话。

您的主要问题是所使用的二进制版本之间的不兼容性

  • 您的 GeckoDriver 版本是 0.22.0
  • GeckoDriver v0.21.0(2018-06-15)的发行说明明确提到以下内容:

    •   

      Firefox 57(及更高版本)

    •   

      硒3.11(及更高版本)

  • 您的 Firefox 版本是 52.9.0

因此 GeckoDriver v0.22.0 Firefox浏览器v57

之间存在明显的不匹配

解决方案

  • GeckoDriver 升级到GeckoDriver v0.22.0级。
  • GeckoDriver位于指定位置。
  • GeckoDriver对非root用户具有可执行权限。
  • Firefox 版本升级到 Firefox v62.0.2 级别。
  • 通过您的 IDE
  • 清理您的项目工作区重建您的项目,并且仅具有必需的依赖项。
  • 如果您的基本 Web客户端版本过旧,请通过Revo Uninstaller进行卸载,并安装最新版本的 Web客户端。 li>
  • 以非root用户身份执行Test

答案 1 :(得分:12)

如果在没有显示的系统上运行Firefox,请确保使用无头模式。

from selenium import webdriver
from selenium.webdriver.firefox.options import Options

options = Options()
options.headless = True
driver = webdriver.Firefox(options=options)

此外,请确保您具有Firefox,Selenium和Geckodriver的兼容版本: https://firefox-source-docs.mozilla.org/testing/geckodriver/geckodriver/Support.html

答案 2 :(得分:6)

此解决方案对我有用

from selenium import webdriver
from selenium.webdriver.firefox.options import Options

options = Options()
options.headless = True
driver = webdriver.Firefox(options=options)

答案 3 :(得分:3)

是的,在构建可以解决问题之前,请先启动Xvfb,但是如果您有管道或多分支管道之类的工作,则此选项不可见。在执行测试的Selenium网格节点中,您需要:

1-安装Xvfb:apt install xvfb

2-执行Xvfb:/usr/bin/Xvfb :99 -ac -screen 0 1024x768x8 & export DISPLAY=":99"

3-重新运行您的节点,例如:java -jar selenium.jar -role node -hub http://#.#.#.#:4444/grid/register -capabilities browserName=firefox,plataform=linux -host #.#.#.# -port 1991

答案 4 :(得分:3)

由于此错误可能有许多不同的根本原因,所以最好找到根本原因,将硒设置为使用调试级别日志记录。就我而言,对于带有水豚的Ruby,我需要设置:Selenium::WebDriver.logger.level = :debug。而且,运行我在日志中看到的相同规范,就我而言,缺少依赖项:

libdbus-glib-1.so.2: cannot open shared object file: No such file or directory
Couldn't load XPCOM.

安装后一切正常。

答案 5 :(得分:2)

我遇到了同样的问题,并且意识到真正的问题是我正在测试的docker容器中未安装某些firefox依赖项。

尝试启动firefox并检查它是否返回错误。

答案 6 :(得分:1)

我处于无头模式,使用所有版本的正确版本,摆脱此错误消息的唯一方法不是以root用户身份执行硒测试

答案 7 :(得分:0)

我能够通过使用Xvfb运行测试来解决此问题。我在远程服务器上运行它们。

我正在使用Jenkins,所以我选中了如下所示的框:

Credit to https://www.obeythetestinggoat.com/book/chapter_CI.html

贷记https://www.obeythetestinggoat.com/book/chapter_CI.html

答案 8 :(得分:0)

我用过:

  • VS代码
  • Linunx / Ubuntu:18.10
  • Nightwatch.js

我的问题是我试图从VS Code终端运行Nightwatch(自动启动GeckoDriver)

答案 9 :(得分:0)

使用geckodriver 26.0和firefox 70.0.1时,我在Windows的WSL下的VS代码中运行它时,我得到了相同的错误:Ubuntu。

Headless设置为True。

我尝试在VS代码中的bash终端中以sudo的身份运行它。我遇到了同样的错误。

在VS代码之外运行它,而不是sudo,我也遇到相同的错误。

答案 10 :(得分:0)

就我而言,我以root用户身份运行测试用例

geckodriver.log

1576076416677   mozrunner::runner       INFO    Running command: "/usr/bin/firefox" "-marionette" "-foreground" "-no-remote" "-profile" "/tmp/rust_mozprofilenCbl2e"
Running Firefox as root in a regular user's session is not supported.  ($HOME is /home/seluser which is owned by seluser.)
1576077143004   mozrunner::runner       INFO    Running command: "/usr/bin/firefox" "-marionette" "-foreground" "-no-remote" "-profile" "/tmp/rust_mozprofile7wpSQ7"
1576077143689   addons.webextension.screenshots@mozilla.org     WARN    Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: mozillaAddons
1576077143689   addons.webextension.screenshots@mozilla.org     WARN    Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: telemetry
1576077143689   addons.webextension.screenshots@mozilla.org     WARN    Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: resource://pdf.js/
1576077143689   addons.webextension.screenshots@mozilla.org     WARN    Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: about:reader*
1576077145372   Marionette      INFO    Listening on port 35571
1576077145423   Marionette      WARN    TLS certificate errors will be ignored for this session
1576077200207   mozrunner::runner       INFO    Running command: "/usr/bin/firefox" "-marionette" "-foreground" "-no-remote" "-profile" "/tmp/rust_mozprofilenhoHlr"
Running Firefox as root in a regular user's session is not supported.  ($HOME is /home/seluser which is owned by seluser.)

我可以绕过

cd /home
chown -R  root seluser

我很伤心地说这是正确的,但是它完成了我的工作

答案 11 :(得分:0)

正如Nico和jay所说,您需要检查日志以查看错误的详细信息。您可能会使用其他系统,因此可以指定存储日志的路径(即“ /tmp/geckodriver.log”)。

from selenium import webdriver
firefox_options = webdriver.firefox.webdriver.Options()
driver = webdriver.Firefox(log_path="/tmp/geckodriver.log", 
                           options=firefox_options)

在我的特定情况下,日志所说的是:

Error: no DISPLAY environment variable specified

解决了在启动驱动程序之前在选项中添加无头模式 的问题。与行:

firefox_options.set_headless()