13

I've tried to search, but haven't found a definitive answer. On Windows Server 2016 WITHOUT Chrome Browser actually installed. I downloaded the correct "chromedriver.exe" and placed it in "D:\Apps\chromedriver.exe". I have added to my environment PATH the full path as "D:\Apps\chromedriver.exe".

When I attempt to start my Windows Service that utilizes the latest Selenium, I get the following error:

Exception occurred: Failed initializing web driver: Message: unknown error: cannot find Chrome binary
  (Driver info: chromedriver=2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab),platform=Windows NT 10.0.14393 x86_64)

Question: Do I have to actually install the full-blown browser in addition to the chromedriver, or is this simply just not finding the chromedriver.exe in my Python code (included below for full disclosure):

def __init__(self, username, password, environment='cert'):
    self.username = username
    self.password = password
    self.environment = environment

    # Instantiate a chrome options object so you can set the size and headless preference
    self.chrome_options = Options()

    # Toggle Headless or not
    if HEADLESS_TOGGLE == 1:
        self.chrome_options.add_argument("--headless")

    self.chrome_options.add_argument("--disable-gpu")  # Disables "Lost UI Shared Context GPU Error on Windows"
    self.chrome_options.add_argument('--disable-extensions')  # Disables Extensions
    self.chrome_options.add_argument("--disable-software-rasterizer")  # Disables "Lost UI Shared Context GPU Error on Windows"
    self.chrome_options.add_argument("--window-size=1024x768")
    self.chrome_options.add_argument("--log-level=3")  # Errors Only
    self.chrome_options.add_argument("--incognito")  # Keeps history and logs clear
    self.chrome_options.add_argument("--no-sandbox")
    self.chrome_options.add_argument("--mute_audio")  # No loud surprises!
    self.chrome_options.add_argument("--no-gpu")  # Disables gpu-based errors (headless)

    self.driver = webdriver.Chrome(chrome_options=self.chrome_options)
undetected Selenium
  • 183,867
  • 41
  • 278
  • 352
Source Matters
  • 1,110
  • 2
  • 15
  • 35
  • Yes you do need a full-install of the browser, for example see the Selenium docs for Chrome "`The server expects you to have Chrome installed in the default location for each system...`" src: https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver. That needs to contain the location of the complete full-blown browser standalone installation. – chickity china chinese chicken Nov 16 '18 at 02:02
  • The selenium driver acts as a wrapper to the full browser: "The ChromeDriver consists of three separate pieces. There is the browser itself ("chrome"), the language bindings provided by the Selenium project ("the driver") and an executable downloaded from the Chromium project which acts as a bridge between "chrome" and the "driver". This executable is called "chromedriver"", which is similar for all browsers. src: https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver#view-all-chromedriver-downloads – chickity china chinese chicken Nov 16 '18 at 02:03
  • Ah ok, great. Thank you for the clarification. I appreciate the information @davedwards – Source Matters Nov 16 '18 at 02:09

3 Answers3

13

This error message...

Exception occurred: Failed initializing web driver: Message: unknown error: cannot find Chrome binary
  (Driver info: chromedriver=2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab),platform=Windows NT 10.0.14393 x86_64)

...implies that the ChromeDriver was unable to find the Chrome binary while trying to initiate a new new Browsing Context i.e. Chrome Browser session.


As per the documentation with in the wiki page of ChromeDriver:

  • ChromeDriver is a standalone server which earlier implemented the WebDriver's wire protocol but slowly and gradually shifting it's implementation as per WebDriver standard.

  • The ChromeDriver consists of three separate pieces.

    • There is the browser itself i.e. chrome
    • The language bindings provided by the Selenium project i.e. the driver
    • An executable downloaded from the Chromium project which acts as a bridge between chrome and the driver which is called chromedriver and we refer to it as the server.
  • In generic scenarios the server expects you to have Chrome installed in the default location for each system:
    • Linux: /usr/bin/google-chrome 1
    • Mac: /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome
    • Windows XP: %HOMEPATH%\Local Settings\Application Data\Google\Chrome\Application\chrome.exe
    • Windows Vista and newer: C:\Users\%USERNAME%\AppData\Local\Google\Chrome\Application\chrome.exe

Note: 1: For Linux systems, the ChromeDriver expects /usr/bin/google-chrome to be a symlink to the actual Chrome binary.

You can find a detailed discussion on overriding the default Chrome binary location in WebDriverException: unknown error: cannot find Chrome binary error with Selenium in Python for older versions of Google Chrome


Solution

So ideally to execute your tests using ChromeDriver / Chrome combo you need to:


Reference

You can find a detailed discussion in:

undetected Selenium
  • 183,867
  • 41
  • 278
  • 352
4

Users provided relevant link to confirm that, "YES" a full Chrome installation is needed in addition to the actual chromedriver.

Link: https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver

Source Matters
  • 1,110
  • 2
  • 15
  • 35
0

In my case, I am using PowerShell. I figured out that you need to put the correct chromedriver.exe version, according to the installed Chrome browser, in the path under Selenium Module installation folder, and replace the existing file.

Check this answer for details:

I cannot start chrome instant using PowerShell and Selenium module

tarekahf
  • 738
  • 1
  • 16
  • 42