Selenium Python调用Firefox报NotADirectoryError错误求助
这个问题我之前也踩过坑!核心原因是Selenium里Firefox和Chrome的WebDriver初始化逻辑不一样:
- 对Chrome来说,
webdriver.Chrome()的第一个参数直接是chromedriver.exe的路径,所以你之前用Chrome没问题; - 但对Firefox来说,旧版
webdriver.Firefox()的第一个参数是Firefox浏览器的安装目录,而不是geckodriver.exe的路径——你把geckodriver的exe文件路径传进去,程序会把它当成目录解析,自然就抛出「目录无效」的错误了。
另外还有个小细节:Windows路径里的\是转义字符,直接写可能会导致路径解析异常,建议用原始字符串(在路径前加r)或者把\换成\\。
下面给你两种可行的解决办法,对应不同的Selenium版本:
方案1:新版Selenium(4.x+)推荐写法
新版Selenium已经统一了各浏览器的驱动初始化方式,用Service类来指定驱动路径更规范:
from selenium import webdriver from selenium.webdriver.firefox.service import Service # 用原始字符串避免转义问题 service = Service(r"C:\selenium\mozilla\geckodriver.exe") driver = webdriver.Firefox(service=service) driver.set_page_load_timeout(30) driver.maximize_window() driver.get("https://www.google.com/") driver.quit()
方案2:兼容旧版Selenium(3.x)的写法
如果你的Selenium还是3.x版本,要把geckodriver路径通过executable_path参数传入,而不是第一个位置参数:
from selenium import webdriver # 同样注意路径转义 driver = webdriver.Firefox(executable_path=r"C:\selenium\mozilla\geckodriver.exe") driver.set_page_load_timeout(30) driver.maximize_window() driver.get("https://www.google.com/") driver.quit()
额外提一句:如果把geckodriver.exe放到系统的PATH环境变量里,不用写路径直接webdriver.Firefox()就能启动,这样更省心~
内容的提问来源于stack exchange,提问作者CodeLeak
相关产品推荐
相关产品推荐

