Search code examples
pythonselenium-webdriverpycharmselenium-chromedriver

Chrome driver not starting up probably due to wrong path (Selenium, Python)


My Selenium program doesn't start up. I have done this a long time ago, and my old programs don't run either due to software updates. I suspect that I have given the wrong path to Chrome and the driver, because the driver "failed to start", but I'm not sure. I'm running Python in PyCharm, the machine is Linux (hence no exe file).

from selenium import webdriver
from selenium.webdriver.chrome.service import Service

url = "https://www.python.org"
options = webdriver.ChromeOptions()
options.binary_location = "/home/username/Documents/.../my-bot/chrome-linux64/chrome"
chrome_driver_binary = "/home/username/Documents/.../my-bot/chromedriver_linux64/chromedriver"
driver = webdriver.Chrome(service=Service(chrome_driver_binary), options=options)
driver.get(url)

The error message I get:

"/home/username/Documents/.../my-bot/venv/bin/python" /home/username/Documents/.../my-bot/main.py 
Traceback (most recent call last):
  File "/home/username/Documents/.../my-bot/main.py", line 12, in <module>
    driver = webdriver.Chrome(service=Service(chrome_driver_binary), options=options)
  File "/home/username/Documents/.../my-bot/venv/lib/python3.10/site-packages/selenium/webdriver/chrome/webdriver.py", line 45, in __init__
    super().__init__(
  File "/home/username/Documents/.../my-bot/venv/lib/python3.10/site-packages/selenium/webdriver/chromium/webdriver.py", line 56, in __init__
    super().__init__(
  File "/home/username/Documents/.../my-bot/venv/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 205, in __init__
    self.start_session(capabilities)
  File "/home/username/Documents/.../my-bot/venv/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 289, in start_session
    response = self.execute(Command.NEW_SESSION, caps)["value"]
  File "/home/username/Documents/.../my-bot/venv/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 344, in execute
    self.error_handler.check_response(response)
  File "/home/username/Documents/.../my-bot/venv/lib/python3.10/site-packages/selenium/webdriver/remote/errorhandler.py", line 229, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: crashed.
  (unknown error: DevToolsActivePort file doesn't exist)
  (The process started from chrome location /home/username/Documents/.../my-bot/chrome-linux64/chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
Stacktrace:
#0 0x55db688604e3 <unknown>
#1 0x55db6858fc76 <unknown>
#2 0x55db685b8d78 <unknown>
#3 0x55db685b5029 <unknown>
#4 0x55db685f3ccc <unknown>
#5 0x55db685f347f <unknown>
#6 0x55db685eade3 <unknown>
#7 0x55db685c02dd <unknown>
#8 0x55db685c134e <unknown>
#9 0x55db688203e4 <unknown>
#10 0x55db688243d7 <unknown>
#11 0x55db6882eb20 <unknown>
#12 0x55db68825023 <unknown>
#13 0x55db687f31aa <unknown>
#14 0x55db688496b8 <unknown>
#15 0x55db68849847 <unknown>
#16 0x55db68859243 <unknown>
#17 0x7f9e5c28f25a <unknown>
#18 0x7f9e5c317fc4 clone


Process finished with exit code 1

I tried running it as a service, it didn't work either. I tried running Firefox instead, it didn't change anything.

I tried running my own program from a few months ago, it didn't work either (gecko driver is in the PATH variable, if I recall right, but Selenium doesn't work any more probably due to an update). This is a fragment of the old program:


from selenium import webdriver
import requests
from selenium.webdriver.firefox.options import Options as FirefoxOptions
import traceback

url = "https://www.python.org"
options = webdriver.FirefoxOptions()
driver = webdriver.Firefox(options=options)
driver.get(url)

Solution

  • The two main causes of DevToolsActivePort file doesn't exist are:

    1. Linux Permissions
    2. Trying to run a headed browser in a headless environment (Linux again)

    The first is fixable by changing Chrome options:

    options.add_argument("--disable-dev-shm-usage")
    options.add_argument("--no-sandbox")
    

    The second is fixable by running in headless mode:

    options.add_argument("--headless")  # Old headless Chrome
    # OR:
    options.add_argument("--headless=new")  # New headless Chrome