WebDriverException: Message: invalid argument: can't kill an exited process with GeckoDriver, Selenium and Python on RaspberryPi3

感情迁移 提交于 2019-11-26 01:54:53

问题


Server: Raspberry Pi 3
OS: Dietpi - version 159
Geckodriver version: 0.22 for arm
Firefox version: 52.9.0
Python version: 3.5
Selenium version: 3.14.1

Gecko is executable, and is located in /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\')
...
...

Output:

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

Any idea what is wrong? I\'ve tried google without luck.


回答1:


This error message...

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

...implies that the GeckoDriver was unable to initiate/spawn a new WebBrowsing Session i.e. Firefox Browser session.

Your main issue is the incompatibility between the version of the binaries you are using as follows:

  • Your GeckoDriver version is 0.22.0.
  • Release Notes of GeckoDriver v0.21.0 (2018-06-15) clearly mentions the following:

    • Firefox 57 (and greater)

    • Selenium 3.11 (and greater)

  • Your Firefox version is 52.9.0.

So there is a clear mismatch between GeckoDriver v0.22.0 and the Firefox Browser v57


Solution

  • Upgrade GeckoDriver to GeckoDriver v0.22.0 level.
  • GeckoDriver is present in the specified location.
  • GeckoDriver is having executable permission for non-root users.
  • Upgrade Firefox version to Firefox v62.0.2 levels.
  • Clean your Project Workspace through your IDE and Rebuild your project with required dependencies only.
  • If your base Web Client version is too old, then uninstall it through Revo Uninstaller and install a recent GA and released version of Web Client.
  • Execute your Selenium Test as a non-root user.

GeckoDriver, Selenium and Firefox Browser compatibility chart




回答2:


If you are running Firefox on a system with no display, make sure you use headless mode.

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

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

Also, make sure you have compatible versions of Firefox, Selenium, and Geckodriver: https://firefox-source-docs.mozilla.org/testing/geckodriver/Support.html




回答3:


I was on headless mode, using correct versions of everything, and the only way to get out of this error message was not to execute the selenium test as root




回答4:


Yes checked Start Xvfb before the build can fix the problem, but if you have a job like a pipeline or multibranch pipeline this option is not visible. In the node of your Selenium grid that you go to execute the test you need:

1- Install Xvfb: apt install xvfb

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

3- Rerun your node, for example: java -jar selenium.jar -role node -hub http://#.#.#.#:4444/grid/register -capabilities browserName=firefox,plataform=linux -host #.#.#.# -port 1991




回答5:


I used:

  • VS Code
  • Linunx/Ubuntu:18.10
  • Nightwatch.js

My problem was that I tried to run Nightwatch (which automatically starts GeckoDriver) from the VS Code terminal.




回答6:


I was able to fix this by running my tests with Xvfb. I was running them on a remote server.

I was using Jenkins so I checked the box that looked like this:

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




回答7:


With geckodriver 26.0, and firefox 70.0.1 I am getting the same error, when I run it in VS code on Windows under WSL: Ubuntu.

Headless is set to True.

I tried running it as sudo in the bash terminal within VS code. I got the same error.

Running it outside of VS code, as sudo and not, I also get the same error.



来源:https://stackoverflow.com/questions/52534658/webdriverexception-message-invalid-argument-cant-kill-an-exited-process-with

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!