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

15,475

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 binary.

You have to take care of a couple of points here:

  1. chrome_options.binary_location : The parameter configures 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 Windows 8 system to start Chrome in Headless Mode:

    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:\Utility\BrowserDrivers\chromedriver.exe')  
    driver.get("http://www.duo.com") 
    print("Chrome Browser Initialized in Headless Mode")
    driver.quit()
    print("Driver Exited")
    
Share:
15,475

Related videos on Youtube

Ishaq Ashraf
Author by

Ishaq Ashraf

Full Stack developer. Hands-on product development experience with Silicon Valley startups and international companies.

Updated on June 04, 2022

Comments

  • Ishaq Ashraf
    Ishaq Ashraf about 2 years

    when i run my script , i got this error

    Traceback (most recent call last):
      File "C:\Users\ishaq\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\common\service.py", line 74, in start
        stdout=self.log_file, stderr=self.log_file)
      File "C:\Users\ishaq\AppData\Local\Programs\Python\Python36\lib\subprocess.py", line 707, in __init__
        restore_signals, start_new_session)
      File "C:\Users\ishaq\AppData\Local\Programs\Python\Python36\lib\subprocess.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:\Users\ishaq\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 62, in __init__
        self.service.start()
      File "C:\Users\ishaq\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\common\service.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:\Users\ishaq\Desktop\chrome\chromedriver.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()
    
    • JeffC
      JeffC almost 7 years
    • JeffC
      JeffC almost 7 years
      Before posting a question you should spend some time reading the error messages and trying to understand what the errors are. Then you should spend some time googling the errors so you can better understand what the errors mean and how people have solved them. This is a common error and there's already a solution if you'd spent the time to look for it.
    • Ishaq Ashraf
      Ishaq Ashraf almost 7 years
      @JeffC actually i was confused in os.path and binary.location . i search alot about it and didnt find a solution thats why i posted this question.
  • undetected Selenium
    undetected Selenium almost 7 years
    Alternatively, you can also try Mozilla Firefox in Headless Mode
  • Ishaq Ashraf
    Ishaq Ashraf almost 7 years
    my script is working great in local, but i want to run my script remotely , i dont want to run my machine all day