selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH error with Headless Chrome

Question:

when i run my script , i got this error

Traceback (most recent call last):
  File "C:UsersishaqAppDataLocalProgramsPythonPython36libsite-packagesseleniumwebdrivercommonservice.py", line 74, in start
    stdout=self.log_file, stderr=self.log_file)
  File "C:UsersishaqAppDataLocalProgramsPythonPython36libsubprocess.py", line 707, in __init__
    restore_signals, start_new_session)
  File "C:UsersishaqAppDataLocalProgramsPythonPython36libsubprocess.py", line 992, in _execute_child
    startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:/Users/ishaq/AppData/Local/Programs/Python/Python36/headless.py", line 9, in <module>
    driver = webdriver.Chrome(executable_path=os.path.abspath("chromedriver"),   chrome_options=chrome_options)
  File "C:UsersishaqAppDataLocalProgramsPythonPython36libsite-packagesseleniumwebdriverchromewebdriver.py", line 62, in __init__
    self.service.start()
  File "C:UsersishaqAppDataLocalProgramsPythonPython36libsite-packagesseleniumwebdrivercommonservice.py", line 81, in start
    os.path.basename(self.path), self.start_error_message)
selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home

here is my script

import os  
from selenium import webdriver  
from selenium.webdriver.common.keys import Keys  
from selenium.webdriver.chrome.options import Options 

chrome_options = Options()  
chrome_options.add_argument("--headless")  
chrome_options.binary_location = 
r'C:UsersishaqDesktopchromechromedriver.exe'    
driver = webdriver.Chrome(executable_path=os.path.abspath("chromedriver"),   
chrome_options=chrome_options)  
driver.get("http://www.duo.com") 

magnifying_glass = driver.find_element_by_id("js-open-icon")  
if magnifying_glass.is_displayed():  
  magnifying_glass.click()  
else:  
  menu_button = driver.find_element_by_css_selector(".menu-trigger.local")  
  menu_button.click() 

search_field = driver.find_element_by_id("site-search")  
search_field.clear()  
search_field.send_keys("Olabode")  
search_field.send_keys(Keys.RETURN)  
assert "Looking Back at Android Security in 2016" in driver.page_source
driver.close()
Asked By: Ishaq Ashraf

||

Answers:

If we analyze the logs it seems the main issue is with in start os.path.basename(self.path) and subsequent error message:

selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH

So it’s clear from the error that the Python client was unable to locate the chromedriver executable binary.

You need to take care of a couple of things as follows:

  1. chrome_options.binary_location : The parameter points to the chrome.exe not the chromedriver.exe

  2. os.path.abspath("chromedriver") will pick up the file path of chromedriver but won’t append chromedriver.exe at the end.

  3. Here is the sample code on my system to start :

    from selenium import webdriver  
    from selenium.webdriver.chrome.options import Options 
    
    chrome_options = Options()  
    chrome_options.add_argument("--headless")  
    driver = webdriver.Chrome(chrome_options=chrome_options, executable_path=r'C:UtilityBrowserDriverschromedriver.exe')  
    driver.get("http://www.duo.com") 
    print("Chrome Browser Initialized in Headless Mode")
    driver.quit()
    print("Driver Exited")
    
Answered By: undetected Selenium