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

11

50

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.

Winshell answered 27/9, 2018 at 10:16 Comment(0)
G
45

Thumb rule

A common cause for Browsers to crash during startup is running WebDriver initiated Browsers as root user (administrator) on Linux. While it is possible to work around this issue by passing --no-sandbox flag when creating your WebDriver session, such a configuration is unsupported and highly discouraged. You need to configure your environment to run Browser as a regular user instead.


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

geckodriver_versions

Ginnifer answered 27/9, 2018 at 11:12 Comment(6)
Running as root, I didn't think can be a problem. It was, thanks. When I was setting custom capabilities the error was different although with same root cause. Pasting here for anybody searching: Unable to find a matching set of capabilities (Selenium::WebDriver::Error::SessionNotCreatedError)Connatural
I updated everything to its newest version, geckodriver is in the correct location on my computer (running ubuntu 19.04) and I am still getting the same error message as in the original question. Not sure what do to nowDress
@DebanjanB In Robot framework Installed python 3.6.9, Firefox 77.0.1 and geckodriver 0.26.0 in ubuntu 18.04 getting error as WebDriverException: Message: invalid argument: can't kill an exited process Can you please help?Vingtetun
I encounter this error somewhat randomly when running Firefox under a standalone selenium server. Restarting the selenium server appears to resolve (MacOS)Lodge
Changing process owner worked for me: I moved from inside the Visual Studio Code to the OS built-in terminal. Although I am not capable of identifying process owner in my Linux system, I solved the problem, using the WebDriver method call driver = webdriver.Firefox(firefox_binary='/path/to/firefox'). I got multiple exceptions from inside VSC (depending on which tricks I tried, running the script either from a terminal $ python mytest.py or in Debugging mode from the editor.Abutment
One problem I had was that the ESR version of Firefox was included in my distro, and it gave me problems. I thus downloaded and unzipped a non-ESR version, and had to manage with dual Firefox installation.Abutment
T
79

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

Titus answered 7/2, 2019 at 20:3 Comment(3)
thanks, this worked for me when having similar problem, on a server running ubuntu 16.04Archaeo
It worked for me too. It is important to remark that firefox itself must be installed in the system. At least for me, this code above worked only after installing firefox.Insistent
I am using a docker selenium grid, with image : selenium/node-firefox-debug:3.141.59 . It shows that it has the compatible versions. But still i am facing above errors.Jankell
G
45

Thumb rule

A common cause for Browsers to crash during startup is running WebDriver initiated Browsers as root user (administrator) on Linux. While it is possible to work around this issue by passing --no-sandbox flag when creating your WebDriver session, such a configuration is unsupported and highly discouraged. You need to configure your environment to run Browser as a regular user instead.


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

geckodriver_versions

Ginnifer answered 27/9, 2018 at 11:12 Comment(6)
Running as root, I didn't think can be a problem. It was, thanks. When I was setting custom capabilities the error was different although with same root cause. Pasting here for anybody searching: Unable to find a matching set of capabilities (Selenium::WebDriver::Error::SessionNotCreatedError)Connatural
I updated everything to its newest version, geckodriver is in the correct location on my computer (running ubuntu 19.04) and I am still getting the same error message as in the original question. Not sure what do to nowDress
@DebanjanB In Robot framework Installed python 3.6.9, Firefox 77.0.1 and geckodriver 0.26.0 in ubuntu 18.04 getting error as WebDriverException: Message: invalid argument: can't kill an exited process Can you please help?Vingtetun
I encounter this error somewhat randomly when running Firefox under a standalone selenium server. Restarting the selenium server appears to resolve (MacOS)Lodge
Changing process owner worked for me: I moved from inside the Visual Studio Code to the OS built-in terminal. Although I am not capable of identifying process owner in my Linux system, I solved the problem, using the WebDriver method call driver = webdriver.Firefox(firefox_binary='/path/to/firefox'). I got multiple exceptions from inside VSC (depending on which tricks I tried, running the script either from a terminal $ python mytest.py or in Debugging mode from the editor.Abutment
One problem I had was that the ESR version of Firefox was included in my distro, and it gave me problems. I thus downloaded and unzipped a non-ESR version, and had to manage with dual Firefox installation.Abutment
P
10

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

Polymerize answered 11/4, 2019 at 22:22 Comment(1)
Just to give people out there more information in case it helps: I am running a process as root and it is working. My problem was that I was needed to run with the headless option.Clientage
A
7

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

Aretina answered 7/11, 2018 at 21:46 Comment(3)
xvfb isn't needed due to running the browser in headless mode.Gallaher
how restart (kill actual) and start /usr/bin/Xvfb ?Soutor
That should be top answer - Firefox won't run outside of X session, so if anyone's running via docker or ssh make sure to start Xvfb to emulate itIndonesia
T
6

This solution worked for me

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

options = Options()
options.headless = True
driver = webdriver.Firefox(options=options)
Tripping answered 11/3, 2020 at 20:31 Comment(1)
If you're getting the WebDriverException error and you have the most updated versions of firefox and geckdriver AND you're on a headless machine, you need to set headless = True as Anar has mentioned here.While
F
4

As there can be many different underlying causes for this error it is best to find the root cause setting selenium to use debug level logging. In my case, for Ruby with capybara I needed to set: Selenium::WebDriver.logger.level = :debug. And voilà, running the same spec I could see in the logs that a dependency was missing, in my case:

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

After installing it all worked fine.

Faina answered 1/6, 2020 at 10:46 Comment(0)
U
2

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.

Unlearned answered 19/6, 2019 at 12:42 Comment(1)
Running it from the terminal (outside of VSCode) also solved it for me, running Firefox 68.0.1., Selenium 3.141.0 and geckodriver v0.24.0. That setup is compatible and then actually works after invoking it from the regular terminal (even without headless).Hydr
T
2

I had the same problem, and realized that the real problem was some firefox dependencies not being installed inside the docker container I was testing in.

Try to initiate firefox and check if it returns an error.

Tantalate answered 19/2, 2020 at 17:45 Comment(0)
A
1

As Nico and jay have stated you need to check the logs to see the details of the error. As you might use different systems, you can specify the path where the log is stored (i.e. "/tmp/geckodriver.log").

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

In my particular case, what the log said was:

Error: no DISPLAY environment variable specified

That was resolved adding in the options the headless mode before starting the driver. With the line:

firefox_options.set_headless()
Ashmead answered 18/10, 2020 at 23:59 Comment(1)
This is the exact troubleshooting step I took to resolve the issue. Error: cannot open display: :0.0 is the message I saw in the logs. The environment variable DISPLAY in my Python process was trying to use display :0.0, which didn't exist. Changing that env var to the correct display was the fix.Clientage
K
0

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

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

Karyotin answered 4/10, 2018 at 0:27 Comment(0)
C
-1

in my case, I was running test cases as 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   [email protected]     WARN    Loading extension '[email protected]': Reading manifest: Invalid extension permission: mozillaAddons
1576077143689   [email protected]     WARN    Loading extension '[email protected]': Reading manifest: Invalid extension permission: telemetry
1576077143689   [email protected]     WARN    Loading extension '[email protected]': Reading manifest: Invalid extension permission: resource://pdf.js/
1576077143689   [email protected]     WARN    Loading extension '[email protected]': 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.)

i could get around by

cd /home
chown -R  root seluser

i woundnt say its correct but it got my job done

Chesser answered 11/12, 2019 at 15:23 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.