如何解决WebDriverException。消息。'geckodriver'可执行文件需要在PATH中?

209 阅读8分钟

在运行Python程序时,你是否得到了"'geckodriver'可执行文件需要在PATH中?"的错误信息?

你是否在Q&A编程网站上寻找答案?但你是否对他们网站上提供的解决方案感到困惑?他们的解决方案是否不能解决这些问题?

如果你的答案是肯定的。你已经来到了正确的地方,我们可以为你提供简单的解决方案来解决这个问题。

在这篇短文中,我们将向你解释四种简单的方法来删除异常信息。最后,我们会给出我们推荐的方法,让你有效地解决这个问题。

问题的提出

当你使用Selenium webdriver 库在Firefox浏览器上运行下面的代码。

from selenium import webdriver
browser = webdriver.Firefox()

你会得到以下一长串的回溯信息,如下图所示。

Traceback (most recent call last):
  File "/Users/mohamedthoufeeq/PycharmProjects/pythonProject/venv/lib/python3.9/site-packages/selenium/webdriver/common/service.py", line 74, in start
    self.process = subprocess.Popen(cmd, env=self.env,
  File "/usr/local/Cellar/python@3.9/3.9.0_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/subprocess.py", line 947, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/local/Cellar/python@3.9/3.9.0_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/subprocess.py", line 1819, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'geckodriver'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/mohamedthoufeeq/PycharmProjects/pythonProject/main.py", line 2, in <module>
    browser = webdriver.Firefox()
  File "/Users/mohamedthoufeeq/PycharmProjects/pythonProject/venv/lib/python3.9/site-packages/selenium/webdriver/firefox/webdriver.py", line 175, in __init__
    self.service.start()
  File "/Users/mohamedthoufeeq/PycharmProjects/pythonProject/venv/lib/python3.9/site-packages/selenium/webdriver/common/service.py", line 84, in start
    raise WebDriverException(
selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.

从回溯中,我们可以看到有两个异常被提出。这些解释如下。

  1. 文件未找到错误。该错误指出 FileNotFoundError。[Errno 2] 没有这样的文件或目录:'geckodriver'。这意味着系统中没有安装GeckoDriver。或者你已经安装了它,但它不在当前路径中。
  • WebDriver 异常。消息指出'geckodriver'的可执行程序需要在PATH中。 PATH是一个变量,指定了可执行程序的位置。这个异常告诉我们,没有关于驱动GeckoDriver的位置的指令。还有,即使你指定了它。GeckoDriver的路径可能是不正确的。

让我们看看你如何通过使用四个解决方案中的任何一个来解决问题。

解决方案1 手动设置GeckoDriver

这种方法需要用户手动干预GeckoDriver的设置,很简单。

第一步:下载GeckoDriver

第一步是使用下面的链接下载驱动程序。

geckodriver

第2步:安装GeckoDriver

第二步是安装驱动程序。你可以将驱动文件解压到你的Mac上,开始安装过程。然后将驱动程序移到你想要的位置。确保你已经复制了驱动程序的路径。

第3步:提及可执行路径

from selenium import webdriver

#code 2

browser = webdriver.Firefox(executable_path="/usr/local/Cellar/geckodriver/0.30.0/bin/geckodriver" )

browser.get("app.finxter.com/")

在上述脚本中,在导入必要的库(如Selenium webdriver)后。在Firefox类中提到GeckoDriver的路径,如代码2所示。在我的例子中,它是/usr/local/Cellar/geckodriver/0.30.0/bin/geckodriver。

这个路径被存储在executable_path .

可执行路径指的是用户可执行文件的完整路径名。 现在你可以使用一个驱动程序。获得访问网站app.finxter.com/ 的方法。

当你运行该模块时。存储在驱动对象中的GeckoDriver驱动与Firefox浏览器进行通信。这使得浏览器自动打开。你可以添加代码进行网络搜刮你所需要的细节,并将其存储在csv文件中。

如前所述,这种方法需要用户手动设置驱动程序,这很乏味。有一种方法可以完全自动化地设置驱动程序。让我们看看解决方案2。

解决方案2 自动设置GeckoDriver

另一种解决这个错误的方法是使用Web Driver Manager。

Web Driver Manager是一个开源的Java库,用于自动管理Selenium Web驱动,如GeckoDriver,ChromeDriver等。它们通过下载、设置和维护驱动来管理。

在以前的解决方案中,你必须做三个手动步骤,首先下载GeckoDriver,然后将其安装到Mac上,再设置路径。在这个方法中,只需要2个步骤来设置驱动程序,而且是完全自动化的。

有意思吧!!

让我们看看你如何使用这个方法来解决路径问题。

步骤1:安装webdriver-manager库。

首先,在终端使用以下命令安装该库

pip install webdriver-manager

第二步:导入GeckoDriverManager

从selenium导入webdriver

从webdriver_manager.firefox导入GeckoDriverManager #code2

driver = webdriver.Firefox(executable_path=GeckoDriverManager().install()) #code3

在这一步,你必须从web驱动管理器库中导入Gecko驱动管理器。接下来使用GeckoDriverManager().install())类来设置驱动程序。一旦驱动程序被安装到你的系统中,路径就会被储存在executable_path中。你不需要在脚本中手动指定PATH。参考代码2和代码3。

每次程序运行时。它自动从源码下载GeckoDriver,然后安装驱动程序,并将路径指定为executable_path。 这种方法完全实现了程序的自动化。GeckoDriver的新版本每年都会发布,这一点非常有利。2021年9月16日,新版本0.30.0发布了。

因此,在解决方案1中,你必须在每次新版本创建时下载驱动程序。

但在这个方法中,你只需编码一次,它就会自动安装最新版本的驱动程序。

解决方案3 使用Homebrew设置GeckoDriver

在这个方法中,我们可以用Homebrew安装GeckoDriver。

Homebrew可以安装你所需要的而MacOS系统不能安装的软件。

它将软件包安装到它们的目录中,然后将文件链接到/usr/local。

让我们研究一下设置GeckoDriver的每个步骤。

第1步:安装Homebrew

首先,打开终端,然后粘贴下面的命令来安装Homebrew。

"$(curl -fsSL raw.githubusercontent.com/Homebrew/in…)"

第二步:安装GeckoDriver

在Home Brew安装成功后。

你可以通过输入下面的命令来安装Geckodriver。

brew install geckodriver

该命令首先下载驱动程序,然后解压缩文件进行安装。

在终端安装后,Geckodriver的路径显示如下

usr/local/Cellar/geckodriver/0.30.0

你必须按照以下步骤找出GeckoDriver exe文件的路径。

在Finder中,点击GO,然后点击GO TO FOLDER。

你必须粘贴路径("usr/local/Cellar/geckodriver/0.30.0")并输入。

你可以找到0.30.0文件夹。打开文件夹,直到你找到Geckodriver的exe文件。

打开驱动,在终端中复制路径。

我的路径是/usr/local/Cellar/geckodriver/0.30.0/bin/geckodriver。

第3步:提及可执行路径

像解决方案1的方法一样,将路径放入executable_path,如下图代码所示。

browser = webdriver.Firefox(executable_path="/usr/local/Cellar/geckodriver/0.30.0/bin/geckodriver" )

将此方法与解决方案1相比较。这个方法设置起来更快,因为在方案1中,你不需要去GeckoDriver链接下载,然后手动解压文件。

但这里提到的方法是最好的,因为设置过程只需几行Python代码就能自动完成。

解决方案4 使用webdriverdownloader设置GeckoDriver

你可以通过使用webdriverdownloader模块来解决这个问题的最后一个方案。

这个模块有助于下载网络驱动二进制文件,如GeckoDriver、ChromeDriver等。

该模块的类如GeckoDriverdownloder是用来下载和安装最新版本的驱动程序。它将被安装在系统路径/usr/local/bin中。

让我们来看看下面的步骤。

第1步:安装webdriverdownloader模块。

在终端键入以下命令来安装它。

pip install webdriverdownloader

第2步:导入GeckoDriverdownloder

输入下面的命令导入GeckoDriverDownloader

从webdriverdownloader导入GeckoDriverDownloader。

第3步:使用下载和安装方法

gdd = GeckoDriverDownloader()

gdd.download_and_install()

上面的代码将搜索最新的驱动程序版本,下载并安装到系统路径中。你可以在/usr/local/bin路径下搜索GeckoDriver。

然后在executable_path中使用这个路径来实现浏览器的自动化。

这个方法和上面的解决方案(2&3)有点类似。不过,这个方法还是比解决方案1有效得多。

总结

我们都知道,驱动是与浏览器进行通信的关键。驱动程序与浏览器进行交互,以打开网站和填写表格,例如,登录或密码,联系表格。此外,还要访问特定的网页并提取数据。如果系统找不到驱动程序,我们就无法实现浏览器的自动化。因此,指定GeckoDriver驱动程序的正确路径是如此的关键。纠正异常信息的四个解决方案是通过手动和自动设置Geckwebdriver,使用webdriver管理器和webdriver下载器。我推荐解决方案2,即使用WebDriver管理器设置GeckoDriver是解决这个异常问题的最佳方法。这种方法可以自动完成从下载到安装驱动程序的整个过程。

除了我的建议,你可以根据你的喜好使用上述任何一种方法。在尝试这些解决方案后,你能向我提供你的宝贵反馈吗?

它对你有用吗?

如何解决WebDriverException。消息。'geckodriver'可执行文件需要在PATH中?首次出现在Finxter上。