【问题标题】:FileNotFoundError: [Errno 2] No such file or directory: 'geckodriver': 'geckodriver' with GeckoDriver and Python in MAC OSFileNotFoundError: [Errno 2] No such file or directory: 'geckodriver': 'geckodriver' with GeckoDriver and Python in MAC OS
【发布时间】:2019-03-28 08:38:05
【问题描述】:

我创建了一个测试脚本来使用 python 在 Eclipse 中打开一个 url,并得到以下错误:

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/common/service.py", line 76, in start
    stdin=PIPE)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/subprocess.py", line 769, in __init__
    restore_signals, start_new_session)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/subprocess.py", line 1516, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'geckodriver': 'geckodriver'

在处理上述异常的过程中,又发生了一个异常:

Traceback (most recent call last):
  File "/Applications/Eclipse.app/Contents/MacOS/C:\EclipseWorkspaces\csse120/PythonSeleniumProject/src/PythonSeleniumModule.py", line 13, in <module>
    driver = webdriver.Firefox()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 164, in __init__
    self.service.start()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/common/service.py", line 83, in start
    os.path.basename(self.path), self.start_error_message)
selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH. 

我在堆栈溢出中阅读了有关相关主题的信息,但它们都没有回答/解决我的问题。

请指教。 谢谢。

【问题讨论】:

  • 您是否阅读了错误消息:“消息:'geckodriver' 可执行文件需要在 PATH 中。”?
  • @KlausD。我可以知道哪个是正确的路径吗?我已将 geckodriver 可执行文件粘贴到 /usr/local/bin 和 /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver 文件夹中
  • /usr/local/bin 应该没问题。您可以通过在任何文件夹中简单地运行geckodriver 从终端运行它吗?
  • 我已经运行了 geckodriver,它现在可以工作了。谢谢@Kla

标签: python macos selenium firefox geckodriver


【解决方案1】:

此错误消息...

FileNotFoundError: [Errno 2] No such file or directory: 'geckodriver': 'geckodriver'
.
selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH. 

...表示您的程序无法在上述目录中找到 GeckoDriver

根据您使用的代码试验:

driver = webdriver.Firefox()

由于您没有明确提及 GeckoDriver绝对路径,因此您的程序会在 路径中搜索 GeckoDriver 在您的底层 操作系统 PATH 变量中提及并且无法定位。

解决方案

  • Mac OS X 上从 mozilla/geckodriver 下载最新的 geckodriver-v0.23.0-macos.tar.gz,将其存储在系统中的任何位置。
  • 在您的程序中,通过参数 executable_path 覆盖您的操作系统 PATH 变量中提到的路径如下:

    from selenium import webdriver
    
    driver = webdriver.Firefox(executable_path='/path/to/geckodriver')
    print("Firefox Browser Invoked")
    driver.get('http://google.com/')
    driver.quit()
    

【讨论】:

  • 我们如何为 Linux 做到这一点
  • @Tessaracter 差不多
【解决方案2】:

根据您选择的绝对路径,上述解决方案不适用于每台机器。此外,可以通过任何程序轻松访问的绝对路径,例如根文件夹,需要管理员权限。

每个存在的 Selenium WebDriver 都有一个 DriverManager 模块,您可以使用它在 PATH 变量内的目录中自动安装 WebDriver。

只进行一次安装很重要。再做一次会报错,我还没找到解决办法。

首先,在您的 Python 环境中安装 webdriver-manager pip install webdriver-managerpip3 如果您使用的是 Python3。

在您的代码上执行此操作,它会正常工作:

from webdriver_manager.firefox import GeckoDriverManager

try:
    driver = webdriver.Firefox()
except Exception:
    driver = webdriver.Firefox(GeckoDriverManager().install())

因此它只会在使用该程序的机器上安装一次。

注意:这与 OperaDriver 存在一些问题。

【讨论】:

    猜你喜欢
    • 2018-06-10
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多