Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NotADirectoryError: [WinError 267] The directory name is invalid error while invoking Firefox through Selenium Python

I'm trying to invoke a firefox browser using Selenium webdriver from below python code..

from selenium import webdriver

# Initializing the WebDriver for Firefox browser
driver = webdriver.Firefox("C:\\selenium\\mozilla\\geckodriver.exe")
driver.set_page_load_timeout(30)
driver.maximize_window()
driver.get("https://www.google.com/")

# Closing the reference
driver.quit()

but it is always throwing an error like below, however this is working for Chrome browser.

Traceback (most recent call last):
  File "C:/Python/Practice/FirefoxSample.py", line 8, in <module>
    driver = webdriver.Firefox("C:\\selenium\\mozilla\\geckodriver.exe")
  File "C:\Python\venv\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 139, in __init__
    firefox_profile = FirefoxProfile(firefox_profile)
  File "C:\Python\venv\lib\site-packages\selenium\webdriver\firefox\firefox_profile.py", line 78, in __init__
    ignore=shutil.ignore_patterns("parent.lock", "lock", ".parentlock"))
  File "C:\Python\Python36-32\lib\shutil.py", line 309, in copytree
    names = os.listdir(src)
NotADirectoryError: [WinError 267] The directory name is invalid: 'C:\\selenium\\mozilla\\geckodriver.exe'

Process finished with exit code 1

What am I missing here?

I have also tried upgrading the selenium package using the pip

pip install -U selenium

Additional info: running the Firefox latest version (59.0.2), Python (3.6.5) and Selenium Gecko webdriver (0.20.0). Not sure if anything is needed to help on this.

like image 789
CodeLeak Avatar asked Apr 19 '18 20:04

CodeLeak


2 Answers

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

  • You need to pass the Key executable_path along with the Value referring to the absolute path of the GeckoDriver through single backslash i.e. \ along with the raw i.e. r switch as follows :

    from selenium import webdriver
    
    driver = webdriver.Firefox(executable_path=r'C:\selenium\mozilla\geckodriver.exe')
    driver.set_page_load_timeout(30)
    driver.get("https://www.google.com/")
    driver.quit()
    
  • Clean your Project Workspace through your IDE and Rebuild your project with required dependencies only.

  • Use CCleaner tool to wipe off all the OS chores before and after the execution of your Test Suite.
  • If your base Web Client version is too old, then uninstall it through Revo Uninstaller and install a recent GA and released version of Web Client.
  • Take a System Reboot.
  • Execute your @Test.
like image 66
undetected Selenium Avatar answered Oct 16 '22 11:10

undetected Selenium


Selenium is looking for the directory, not the executable. You have to point to the directory where geckodriver.exe is placed. Do not include geckodriver.exe in the string argument.

Instead of

driver = webdriver.Firefox("C:\\selenium\\mozilla\\geckodriver.exe")

Do

driver = webdriver.Firefox("C:\\selenium\\mozilla")
like image 1
Nakash Kumar Avatar answered Oct 16 '22 11:10

Nakash Kumar