Selenium error "Chrome failed to start: exited abnormally. (unknown error: DevToolsActivePort file doesn't exist)"

I am using selenium in Python, which requires the chromedriver and chrome binary to be installed on the server.

How can I accomplish this?

Here is what I have so far, but on the server I see error:
“Chrome failed to start: exited abnormally. (unknown error: DevToolsActivePort file doesn’t exist) (The process started from chrome location /opt/render/project/bin/chrome/opt/google/chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)”

Here is my Python file:

import os

from dotenv import load_dotenv

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.keys import Keys


load_dotenv()

# default path for homebrew-installed chromedriver
CHROMEDRIVER_PATH = os.getenv("CHROMEDRIVER_PATH", default="/usr/local/bin/chromedriver")
CHROME_BINARY_PATH = os.getenv("CHROME_BINARY_PATH") # specify path where chrome binary is installed, as necessary (see "build.sh")
HEADLESS_MODE = bool(os.getenv("HEADLESS_MODE", default="false") == "true")


def create_driver(headless=HEADLESS_MODE, chromedriver_path=CHROMEDRIVER_PATH, binary_location=CHROME_BINARY_PATH):

    options = webdriver.ChromeOptions()
    # help Mac find where you installed Chrome
    # help production server find custom installation of chrome binary (see "build.sh"):
    if binary_location:
        # https://github.com/SeleniumHQ/selenium/blob/4071737de47f1cec2dfef934f3e18a2e36db20d5/py/selenium/webdriver/chromium/options.py#L34
        options.binary_location = binary_location
    if headless:
        options.add_argument('--no-sandbox')
        options.add_argument('--incognito')
        options.add_argument('--headless')
        options.add_argument('--disable-dev-shm-usage')

    #return webdriver.Chrome(chromedriver_path, options=options)

    service = Service(executable_path=chromedriver_path)
    return webdriver.Chrome(service=service, options=options)


if __name__ == "__main__":

    driver = create_driver()
    print(driver)

    #driver.get("https://google.com")

Environment variables set on the server:

CHROME_BINARY_PATH="/opt/render/project/bin/chrome/opt/google/chrome"
CHROMEDRIVER_PATH="/opt/render/project/bin/chromedriver"
HEADLESS_MODE=true

Here is my build.sh file:

CHROME_PATH=/opt/render/project/bin/chrome/opt/google/chrome/

if [[ ! -d $CHROME_PATH ]]; then

    echo "...Downloading Chrome Binary..."
    #wget <uri> -P /path/to/folder
    wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb -P /tmp

    echo "...Installing Chrome Binary..."
    mkdir -p /opt/render/project/bin/chrome
    dpkg -x /tmp/google-chrome-stable_current_amd64.deb /opt/render/project/bin/chrome
    # this is a directory with its own "etc", "opt", and "usr" subdir

    echo "...Cleaning Up..."
    rm /tmp/google-chrome-stable_current_amd64.deb

    echo "...Adding to Path..."
    #export PATH="${PATH}:${CHROME_PATH}/opt/google/chrome/"
    export PATH="${PATH}:/opt/render/project/bin/chrome/opt/google/chrome"

else
  echo "...Detected Existing Chrome Binary"
fi


#CHROMEDRIVER_PATH=/usr/local/bin/chromedriver
CHROMEDRIVER_PATH=/opt/render/project/bin/chromedriver

if [[ ! -d $CHROMEDRIVER_PATH ]]; then

    echo "...Downloading Chromedriver..."
    wget -O /tmp/chromedriver.zip http://chromedriver.storage.googleapis.com/`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE`/chromedriver_linux64.zip

    echo "...Installing Chromedriver..."
    unzip /tmp/chromedriver.zip chromedriver -d /opt/render/project/bin

    echo "...Cleaning Up..."
    rm /tmp/chromedriver.zip

    echo "...Adding to Path..."
    export PATH="${PATH}:${CHROMEDRIVER_PATH}"
    echo $PATH
else
  echo "...Detected Existing Chromedriver Installation"
fi

echo "...Installing packages..."
pip install -r requirements.txt

echo "...Build Script Completed!"

Hey,

Can you check this previous community topic: https://community.render.com/t/installing-headless-chromium-w-o-docker/5185 and let me know if that helped you installing Chrome?

Jérémy.
Render Support, UTC+3

As you can see I based my solution off of the code in that post. And I’m experiencing the error I mentioned. So I guess what I’m hoping from you is actually dig in a bit to help me fix it.

Furthermore since setting up selenium in Python is such a common use case, I would hope Render would give users a good experience by preparing a document that walks users through how to do it. Other platforms provide “buildpacks” / plugins to help with common use cases like this.

Hey,

There are two probable scenarios unfolding. Firstly, as outlined in the instructions found here: https://community.render.com/t/installing-headless-chromium-w-o-docker/5185/4, it seems that Chrome isn’t accessible via your ‘PATH’ due to the absence of an export statement in your start command.

Secondly, a disparity in major versions between your chrome and chromedriver could potentially give rise to problems.

If you desire a more in-depth investigation, kindly use the “Contact Support” form within the dashboard to get in touch.

Jérémy.
Render Support, UTC+3

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.