使用 Python 的 Selenium - Geckodriver 可执行文件需要在 PATH 中

Selenium using Python - Geckodriver executable needs to be in PATH

提问人:tadm123 提问时间:10/24/2016 最后编辑:starballtadm123 更新时间:6/29/2023 访问量:954960

问:

我正在回顾 Sweigart 的 Automate the Boring Stuff with Python 文本。我正在使用 IDLE,并且已经安装了 Selenium 模块和 Firefox 浏览器。

每当我尝试运行 webdriver 函数时,我都会得到以下信息:

from selenium import webdriver
browser = webdriver.Firefox()

例外:

Exception ignored in: <bound method Service.__del__ of <selenium.webdriver.firefox.service.Service object at 0x00000249C0DA1080>>
Traceback (most recent call last):
  File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 163, in __del__
    self.stop()
  File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 135, in stop
    if self.process is None:
AttributeError: 'Service' object has no attribute 'process'
Exception ignored in: <bound method Service.__del__ of <selenium.webdriver.firefox.service.Service object at 0x00000249C0E08128>>
Traceback (most recent call last):
  File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 163, in __del__
    self.stop()
  File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 135, in stop
    if self.process is None:
AttributeError: 'Service' object has no attribute 'process'
Traceback (most recent call last):
  File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 64, in start
    stdout=self.log_file, stderr=self.log_file)
  File "C:\Python\Python35\lib\subprocess.py", line 947, in __init__
    restore_signals, start_new_session)
  File "C:\Python\Python35\lib\subprocess.py", line 1224, in _execute_child
    startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified

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

Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    browser = webdriver.Firefox()
  File "C:\Python\Python35\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 135, in __init__
    self.service.start()
  File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 71, in start
    os.path.basename(self.path), self.start_error_message)
selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.

我想我需要为 设置路径,但我不确定如何,那么我该怎么做呢?geckodriver

python selenium firefox selenium-firefoxdriver geckodriver

评论

5赞 Andrew 10/24/2016
在此处查看我对类似问题的回答
0赞 tadm123 10/24/2016
我将 geckodriver.exe 放在 Python/Python35 目录中,因此它具有相同的路径,并且我遇到了更多问题。
124赞 Nostalg.io 11/15/2016
在 Mac 上:brew install geckodriver
2赞 tadm123 11/28/2016
我发现通过 Chrome 浏览器运行它比在 Firefox 上运行它要快一些,您只需要为此下载即可。chromedriver
0赞 Ehvince 12/9/2016
注意:最近有 Testcafe 开源了。它不需要任何浏览器插件,它们是内置的。我想使用Selenium,但这看起来是一个有趣的选择。

答:

461赞 Saurabh Gaur 10/24/2016 #1

selenium.common.exceptions.WebDriverException:消息:“geckodriver”可执行文件需要位于 PATH 中。

首先,您需要从这里下载最新的可执行 geckodriver 以使用 Selenium 运行最新的 Firefox

实际上,Selenium客户端绑定尝试从系统中找到可执行文件。您需要将包含可执行文件的目录添加到系统路径中。geckodriverPATH

  • 在 Unix 系统上,如果您使用的是兼容 Bash 的 shell,则可以执行以下操作将其附加到系统的搜索路径中:

    export PATH=$PATH:/path/to/directory/of/executable/downloaded/in/previous/step
    
  • 在 Windows 上,您需要更新 Path 系统变量,以手动命令行将完整目录路径添加到可执行 geckodriver**(在将可执行 geckodriver 添加到系统 PATH 后,不要忘记重新启动系统以使其生效)**。原理与Unix相同。

现在,您可以像下面一样运行代码:-

from selenium import webdriver

browser = webdriver.Firefox()

selenium.common.exceptions.WebDriverException:消息:预期的浏览器二进制文件位置,但在默认位置找不到二进制文件,未提供“moz:firefoxOptions.binary”功能,并且未在命令行上设置二进制标志

异常清楚地表明您已经将 Firefox 安装在其他位置,而 Selenium 正在尝试查找 Firefox 并从默认位置启动,但它找不到它。您需要明确提供Firefox安装的二进制位置才能启动Firefox,如下所示:-

from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary

binary = FirefoxBinary('path/to/installed firefox binary')
browser = webdriver.Firefox(firefox_binary=binary)

评论

10赞 tadm123 10/24/2016
谢谢,但我在目录上设置了my,并设置了您描述的路径,但它给了我以下错误:geckodriver.exeC:\Python\Python35\selenium
5赞 tadm123 10/24/2016
感谢@Saurabh Gaur,它现在正在工作。我手动将Firefox的路径添加到系统变量中,它都可以正常工作。启动需要一点时间,但我猜这很正常。谢谢!
4赞 NoSuchElephantException 11/4/2016
当我开始指定 firefox 二进制路径时,我首先收到错误“WebDriverException:消息:无法启动浏览器:权限被拒绝”,但重新启动计算机 (Windows 10) 解决了问题。- 以防万一其他人遇到和我一样的问题。
3赞 User 12/8/2016
什么是二进制文件?这是否意味着可执行文件?
15赞 dsalaj 3/23/2017
除了这个答案之外,我还想扩展一下如何设置 in unix 环境。你可以在代码中设置它,因为你不需要它在系统范围内: 或者干脆将 geckodriver 二进制文件保存在路径中已有的目录中:PATHos.environ["PATH"] += os.pathsep + 'path/to/dir/containing/geckodriver/'mv geckodriver /usr/local/bin
144赞 Andrea Perdicchia 12/2/2016 #2

这一步在 Ubuntu 和 Firefox 50 上为我解决了这个问题。

  1. 下载 geckodriver

  2. 将 geckodriver 复制到文件夹/usr/local/bin

无需添加:

firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
firefox_capabilities['binary'] = '/usr/bin/firefox'
browser = webdriver.Firefox(capabilities=firefox_capabilities)

评论

1赞 Andrea Perdicchia 1/12/2017
在代码中,不能添加 capability 变量
0赞 d84_n1nj4 1/17/2017
您碰巧知道如何设置Firefox的下载目录吗?我添加了以下问题:设置Firefox首选项。任何帮助将不胜感激。
0赞 Andrea Perdicchia 1/17/2017
在 Debian 或 Ubuntu 中,您必须使用 apt 命令来安装 Firefox。对于Windows,我不知道对不起
0赞 HackNone 7/12/2017
谢谢。应用此答案后,我进一步采用此解决方案来处理后续问题:stackoverflow.com/questions/43713445/...
0赞 Ronald Das 5/11/2018
谢谢,Pycharm 没有找到 geckodriver,尽管它在主页和项目文件夹中,但在将其移动到 /usr/local/bin 后,它运行良好
4赞 JustASteve 12/20/2016 #3

非常可悲的是,没有一本关于 Selenium/Python 的书籍以及通过 Google 发布的关于这个问题的大多数评论都没有清楚地解释在 Mac 上设置它的路径逻辑(一切都是 Windows!YouTube 视频都是在你获得路径设置的“之后”拾取的(在我看来,这是便宜的出路!因此,对于出色的 Mac 用户,请使用以下内容来编辑您的 Bash 路径文件:

touch ~/.bash_profile; open ~/.bash_profile*

然后添加一个路径,如下所示......

# Setting PATH for geckodriver
PATH=“/usr/bin/geckodriver:${PATH}”
export PATH

# Setting PATH for Selenium Firefox
PATH=“~/Users/yourNamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/selenium/webdriver/firefox/:${PATH}”
export PATH

# Setting PATH for executable on Firefox driver
PATH=“/Users/yournamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/selenium/webdriver/common/service.py:${PATH}”
export PATH*

这对我有用。

38赞 Anthon 12/30/2016 #4

saurabh 的答案解决了这个问题,但它没有解释为什么 Automate the Boring Stuff with Python 不包括这些步骤。

这是由于本书基于 Selenium 2.x,并且该系列的 Firefox 驱动程序不需要 Gecko 驱动程序。在开发 Selenium 时,用于驱动浏览器的 Gecko 接口不可用。

Selenium 2.x 系列中的最新版本是 2.53.6(例如,请参阅这些答案,以便更轻松地查看版本)。

2.53.6 版本页面根本没有提到 Gecko。但是从版本 3.0.2 开始,文档明确指出您需要安装 Gecko 驱动程序。

如果在升级(或安装在新系统上)后,您之前(或在旧系统上)运行良好的软件不再工作并且您很着急,请通过以下方式将 Selenium 版本固定在您的 virtualenv 中

pip install selenium==2.53.6

但当然,开发的长期解决方案是使用最新版本的 Selenium 设置一个新的 virtualenv,安装 Gecko 驱动程序并测试一切是否仍按预期工作。

但是主要版本的颠簸可能会引入您的书中未涵盖的其他 API 更改,因此您可能希望坚持使用较旧的 Selenium,直到您有足够的信心可以自己修复 Selenium 2 和 Selenium 3 API 之间的任何差异。

6赞 Roochiedoor 1/6/2017 #5

我实际上发现您可以使用最新的 geckodriver,而无需将其放入系统路径中。目前我正在使用

https://github.com/mozilla/geckodriver/releases/download/v0.12.0/geckodriver-v0.12.0-win64.zip

火狐浏览器 50.1.0

Python 3.5.2 中文文档

硒 3.0.2

视窗 10

我正在运行一个 VirtualEnv(我使用 PyCharm 管理它,我假设它使用 Pip 来安装所有内容)。

在下面的代码中,我可以使用 executable_path 参数为 geckodriver 使用特定路径(我通过查看发现这一点 Lib\site-packages\selenium\webdriver\firefox\webdriver.py )。请注意,我怀疑调用 webdriver 时参数参数的顺序很重要,这就是为什么executable_path在我的代码中排在最后(倒数第二行在最右边)。

您可能还注意到,我使用自定义的Firefox配置文件来解决sec_error_unknown_issuer问题,如果您正在测试的站点具有不受信任的证书,您将遇到该问题。请参阅如何使用 Selenium 禁用 Firefox 的不受信任的连接警告?

经过调查,发现 Marionette 驱动程序不完整且仍在进行中,并且用于关闭或设置证书的各种功能或配置文件选项设置得再多也无法正常工作。因此,使用自定义配置文件更容易。

无论如何,这是关于我如何让 geckodriver 在不进入路径的情况下工作的代码:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True

#you probably don't need the next 3 lines they don't seem to work anyway
firefox_capabilities['handleAlerts'] = True
firefox_capabilities['acceptSslCerts'] = True
firefox_capabilities['acceptInsecureCerts'] = True

# In the next line I'm using a specific Firefox profile because
# I wanted to get around the sec_error_unknown_issuer problems with the new Firefox and Marionette driver
# I create a Firefox profile where I had already made an exception for the site I'm testing
# see https://support.mozilla.org/en-US/kb/profile-manager-create-and-remove-firefox-profiles#w_starting-the-profile-manager

ffProfilePath = 'D:\Work\PyTestFramework\FirefoxSeleniumProfile'
profile = webdriver.FirefoxProfile(profile_directory=ffProfilePath)
geckoPath = 'D:\Work\PyTestFramework\geckodriver.exe'
browser = webdriver.Firefox(firefox_profile=profile, capabilities=firefox_capabilities, executable_path=geckoPath)
browser.get('http://stackoverflow.com')

评论

0赞 Endle_Zhenbo 6/28/2017
我收到 SyntaxError:(unicode 错误)'unicodeescape' 编解码器无法解码字节...我必须将 gecko 路径更改为 epath = r'C:\Users\step_\Documents\mtg_buyer\geckodrivers\geckodriver.exe'。也许原因是我使用的是中国的 Windows 10?
225赞 Nesa 2/9/2017 #6

这为我解决了。

from selenium import webdriver
driver = webdriver.Firefox(executable_path=r'your\path\geckodriver.exe')
driver.get('http://inventwithpython.com')

评论

0赞 Darius 11/4/2017
如果您获得错误的权限,请尝试从路径中删除 [r',只需“excecutable_path='path\to\your'diretory'”
0赞 Nesa 5/9/2018
@adityarawat您使用的是什么操作系统?
0赞 aditya rawat 5/9/2018
但现在我得到的是 OSError 而不是错误的权限。我以某种方式设法将 geckodriver 复制到 /usr/local/bin。但现在这个新错误正在杀死我
0赞 Nesa 5/9/2018
@adityarawat你可以从这里独立下载 geckodriver:github.com/mozilla/geckodriver/releases 用 tar 解压它并使其可使用 chmod +x 执行,它不必在 /usr/local/bin 中,你只需要指定它的路径
0赞 aditya rawat 5/9/2018
为了清楚起见,我已经下载了 arm7hf.tar 文件并将其也解压缩,并使用命令将其添加到路径中(它是在桌面中提取的)。但它也无济于事。我仍然得到 OSError[errno 8 ]export PATH=$PATH:geckodriver
9赞 Umang Sardesai 2/9/2017 #7

适用于 Mac 的步骤

简单的解决方案是下载 GeckoDriver 并将其添加到您的系统 PATH 中。您可以使用以下两种方法之一:

短方法

  1. 下载并解压缩 Geckodriver

  2. 在启动驱动程序时提及路径:

    driver = webdriver.Firefox(executable_path='/your/path/to/geckodriver')
    

Long 方法

  1. 下载并解压缩 Geckodriver

  2. 打开。如果您尚未创建它,可以使用以下命令进行创建: 。然后使用以下命令打开它:.bash_profiletouch ~/.bash_profileopen ~/.bash_profile

  3. 考虑到 GeckoDriver 文件存在于您的下载文件夹中,您可以将以下行添加到该文件中:.bash_profile

    PATH="/Users/<your-name>/Downloads/geckodriver:$PATH"
    export PATH
    

这样,您就将 GeckoDriver 的路径附加到您的系统路径中。这会告诉系统在执行 Selenium 脚本时 GeckoDriver 所在的位置。

  1. 保存并强制执行。这将立即加载值,而无需重新启动。为此,您可以运行以下命令:.bash_profile

source ~/.bash_profile

  1. 就是这样。大功告成!您现在可以运行 Python 脚本。

评论

3赞 P A N 3/29/2017
我能够使用 Homebrew: 下载,然后通过以下方式启动 Firefox:geckodriverbrew install geckodriverdriver = webdriver.Firefox(executable_path="/usr/local/bin/geckodriver")
1赞 Hamid Zandi 2/16/2017 #8

macOS v10.12.1 (Sierra) 和 Python 2.7.10 上,这对我有用:

def download(url):
    firefox_capabilities = DesiredCapabilities.FIREFOX
    firefox_capabilities['marionette'] = True
    browser = webdriver.Firefox(capabilities=firefox_capabilities,
                                executable_path=r'/Users/Do01/Documents/crawler-env/geckodriver')
    browser.get(url)
    return browser.page_source
1赞 Nathan Gisvold 2/28/2017 #9

在 Raspberry Pi 上,我必须从 ARM 驱动程序创建它,并在文件 webdriver.py 中设置 geckodriver 和日志路径:

sudo nano /usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py
def __init__(self, firefox_profile=None, firefox_binary=None,
             timeout=30, capabilities=None, proxy=None,
             executable_path="/PATH/gecko/geckodriver",
             firefox_options=None,
             log_path="/PATH/geckodriver.log"):

评论

0赞 Peter Mortensen 11/6/2020
创造什么?来自 ARM 驱动程序?来自 ARM 驱动程序(是否有多个)?什么是“ARM 驱动程序”?你能详细说明一下吗?
0赞 Peter Mortensen 4/6/2022
好的,OP 已经离开了大楼:最后一次出现是在 4 年多前
2赞 Peter Graham 4/19/2017 #10

Selenium在他们的DESCRIPTION.rst文件中回答了这个问题:

司机
=======

Selenium 需要驱动程序才能与所选浏览器进行交互。火狐浏览器, 例如,requires _,需要先安装它,然后才能运行以下示例。确保它在您的 中,例如,将其放在 或 中。geckodriver <https://github.com/mozilla/geckodriver/releases>PATH/usr/bin/usr/local/bin

未能遵守此步骤将给出错误“selenium.common.exceptions.WebDriverException:消息:”geckodriver“可执行文件需要在 PATH 中。

基本上只需下载 geckodriver,解压缩并将可执行文件移动到 /usr/bin 文件夹即可。

评论

1赞 Elliot Robert 6/4/2017
这句话包含适用于 linux mint 18 的说明。
3赞 Lone Ronin 7/14/2017 #11

我正在使用 Windows 10,这对我有用:

  1. 这里下载 geckodriver。为您正在使用的计算机下载正确的版本。
  2. 解压缩您刚刚下载的文件并剪切/复制其中包含的“.exe”文件
  3. 导航到 C:{your python root folder}。我的是 C:\Python27。将 geckodriver.exe 文件粘贴到此文件夹中。
  4. 重新启动开发环境。
  5. 请尝试再次运行代码。它现在应该可以工作了。
24赞 Ripon Al Wasim 7/21/2017 #12

要为 Selenium Python 设置 geckodriver:

它需要使用 FirefoxDriver 设置 geckodriver 路径,如下代码所示:

self.driver = webdriver.Firefox(executable_path = 'D:\Selenium_RiponAlWasim\geckodriver-v0.18.0-win64\geckodriver.exe')

下载适合您的操作系统的 geckodriver(来自 https://github.com/mozilla/geckodriver/releases) → 将其解压缩到您选择的文件夹中 → 如上所述正确设置路径。

我在 Windows 3.6.2 上使用 Python 3.4.3 和 Selenium WebDriver 10。

设置 geckodriver 的另一种方法:

i) 只需将 geckodriver.exe 粘贴到 /Python/Scripts/ 下(在我的情况下,文件夹是: )
ii) 现在编写如下简单的代码:
C:\Python36\Scripts

self.driver = webdriver.Firefox()
42赞 roskakori 9/3/2017 #13

在已安装 Homebrew 的 macOS 上,您只需运行终端命令:

brew install geckodriver

因为 Homebrew 已经扩展了 所以不需要修改任何启动脚本。PATH

评论

2赞 JKC 8/14/2019
@roskakori我这样做了,它已成功安装,但我仍然收到相同的错误
0赞 Sam 4/21/2020
这为我做到了,谢谢。使用 Firefox 72.0.2 和 Selenium 3.141.0
0赞 jbeku 10/20/2021
这也适用于我,无需修改任何内容。谢谢!
13赞 Jalles10 10/23/2017 #14

适用于 Windows 的最简单方法!

这里下载最新版本。将 geckodriver.exe 文件添加到 Python 目录(或已在 .这应该可以解决问题(已在 Windows 10 上进行了测试)。geckodriverPATH

评论

0赞 Jakub Ujvvary 10/26/2020
Windows Server 2019 - 在系统中添加路径到geckodriver.exe后,它不起作用,但是在将geckodiriver.exe复制到python路径后,它起作用了!谢谢 : )
8赞 Snidhi Sofpro 4/16/2018 #15

一些额外的输入/说明:

以下足以作为 Windows 7、Python 3.6 和 Selenium 3.11 的解决方案:

dsalaj 对 Unix 的另一个答案的注释也适用于 Windows;可以避免在 Windows 级别修改 PATH 环境变量并重新启动 Windows 系统。

(1) 下载 geckodriver(如本线程前面所述)并将(解压缩的)geckdriver.exe放在 X:\Folder\of\your\choice

(2) Python 代码示例:

import os;
os.environ["PATH"] += os.pathsep + r'X:\Folder\of\your\choice';

from selenium import webdriver;
browser = webdriver.Firefox();
browser.get('http://localhost:8000')
assert 'Django' in browser.title

笔记:

(1) 上述代码可能需要大约 10 秒才能打开指定 URL 的 Firefox 浏览器。

(2) 如果指定 URL 上没有服务器运行或提供标题包含字符串“Django”的页面,则 Python 控制台将显示以下错误:

selenium.common.exceptions.WebDriverException:消息:已到达错误页面:about:neterror?e=connectionFailure&u=http%3A//localhost%3A8000/&c=UTF-8&f=regular&d=Firefox%20can%E2%80%9

21赞 Rodolfo Alvarez 6/26/2018 #16

如果您使用的是 Anaconda,您所要做的就是激活您的虚拟环境,然后使用以下命令安装 geckodriver

conda install -c conda-forge geckodriver

评论

0赞 WebComer 1/9/2019
是的,它安装了 geckodriver,但 pycharm 错误保持不变。
2赞 Minions 3/20/2019 #17

对于Windows用户

使用原始代码,因为它:

from selenium import webdriver
browser = webdriver.Firefox()
driver.get("https://www.google.com")

然后从以下位置下载驱动程序:mozilla/geckodriver

将其放置在固定路径中(永久)...举个例子,我把它放进去:

C:\Python35

然后转到系统的环境变量。在“系统变量”网格中查找 Path 变量并添加:

;C:\Python35\geckodriver

GeckoDriver,而不是 GeckoDriver.exe

评论

1赞 Saurabh Chandra Patel 6/16/2019
GeckoDriver,而不是 GeckoDriver.exe。
21赞 jmunsch 6/14/2019 #18

Ubuntu 18.04+ 和最新版本的 geckodriver

这也应该适用于其他类 Unix 变体。

export GV=v0.30.0
wget "https://github.com/mozilla/geckodriver/releases/download/$GV/geckodriver-$GV-linux64.tar.gz"
tar xvzf geckodriver-$GV-linux64.tar.gz
chmod +x geckodriver
sudo cp geckodriver /usr/local/bin/

对于Mac,请更新为:

geckodriver-$GV-macos.tar.gz
3赞 InLaw 10/9/2019 #19
from webdriverdownloader import GeckoDriverDownloader # vs ChromeDriverDownloader vs OperaChromiumDriverDownloader
gdd = GeckoDriverDownloader()
gdd.download_and_install()
#gdd.download_and_install("v0.19.0")

这将为您提供在Windows上获得gekodriver.exe的路径。

from selenium import webdriver
driver = webdriver.Firefox(executable_path=r'C:\\Users\\username\\\bin\\geckodriver.exe')
driver.get('https://www.amazon.com/')
71赞 Navarasu 11/6/2019 #20

我看到讨论仍然在谈论通过下载二进制文件并手动配置路径来设置 geckodriver 的旧方法。

这可以使用 webdriver-manager 自动完成

pip install webdriver-manager

现在,问题中的上述代码将简单地与以下更改一起使用,

from selenium import webdriver
from webdriver_manager.firefox import GeckoDriverManager

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

评论

0赞 Mischief_Monkey 5/21/2020
Safari 甚至 Internet Explorer 是否有类似的驱动程序管理器?
0赞 Peter Mortensen 11/6/2020
还是使用 ?pip3
3赞 Tmfwang 3/5/2021
棒!这要容易得多!
1赞 MagicLAMP 1/13/2022
谢谢堆。这是唯一有效的方法。我正在运行一个 cron 作业,该作业将一个程序生成到运行 selenium 的线程。
1赞 snipher marube 10/10/2022
这对你有帮助。太酷了
2赞 apet 12/6/2019 #21

如果您使用虚拟环境和 Windows 10(也许其他系统也是如此),您只需要将 geckodriver.exe 放入虚拟环境目录中的以下文件夹中:

...\my_virtual_env_directory\Scripts\geckodriver.exe

评论

0赞 Olfredos6 6/20/2020
完全。。。在环境的 lib(Unix) 或 Scripts(Windows) 目录中安装 geckodriver 有助于在使用虚拟环境时解决此问题。
4赞 Max Malysh 2/1/2020 #22

考虑安装容器化的 Firefox:

docker pull selenium/standalone-firefox
docker run --rm -d -p 5555:4444 --shm-size=2g selenium/standalone-firefox

使用以下方式连接:webdriver.Remote

driver = webdriver.Remote('http://localhost:5555/wd/hub', DesiredCapabilities.FIREFOX)
driver.set_window_size(1280, 1024)
driver.get('https://toolbox.googleapps.com/apps/browserinfo/')
driver.save_screenshot('info.png')
1赞 Olesya M 4/21/2020 #23

对我来说,只需在相同的环境中安装就足够了:geckodriver

brew install geckodriver

并且代码没有更改:

from selenium import webdriver
browser = webdriver.Firefox()
5赞 Tanmoy Bhowmick 7/23/2020 #24

如果您使用的是 Linux,则可以使用简单的命令来解决此问题

  1. 首先,下载(https://github.com/mozilla/geckodriver/releases)并解压缩ZIP文件

  2. 打开解压缩的文件夹

  3. 从文件夹(解压后文件所在的位置)打开终端geckodriver

    Enter image description here

  4. 现在在终端上运行这个简单的命令,将 geckodriver 复制到正确的文件夹中:

     sudo cp geckodriver /usr/local/bin
    
11赞 user9013730 9/3/2020 #25

geckodriver默认情况下未安装。

geckodriver

输出:

Command 'geckodriver' not found, but it can be installed with:

sudo apt install firefox-geckodriver

以下命令不仅安装它,而且还将其放入可执行文件中。PATH

sudo apt install firefox-geckodriver

只需一步即可解决问题。我遇到了与您完全相同的错误,并且一安装它就消失了。来吧,试一试。

which geckodriver

输出:

/usr/bin/geckodriver

geckodriver

输出:

1337    geckodriver    INFO    Listening on 127.0.0.1:4444
^C

评论

1赞 S Andrew 10/5/2020
这对我有用。此外,它还消除了下载驱动程序并将其置于正确路径的痛苦。
1赞 ar2015 11/17/2021
这是实际的答案。
1赞 Valentin 4/1/2022
简单易行
10赞 Maheep 8/9/2021 #26

对于 Ubuntu 16.04 (Xenial Xerus) 及更高版本,您可以执行以下操作:

对于 Firefox:
sudo apt-get install firefox-geckodriver

对于 Chrome:
sudo apt-get install chromium-chromedriver

评论

0赞 ar2015 11/17/2021
解决了我的 firefox 问题。
3赞 anusha.V 10/2/2021 #27

对于MacBook用户

步骤1:

打开此链接并复制该 Homebrew 路径,将其粘贴到终端中并安装它。

步骤2:

brew install geckodriver

步骤3:

pip install webdriver-manager
6赞 Aman Bagrecha 10/6/2021 #28

避免该错误的一种新方法是使用 Conda 环境。

使用,您不必向路径添加任何内容或编辑代码!conda install -c conda-forge geckodriver

评论

0赞 M2014 12/31/2021
我在 VSCode 中尝试过这个,能够使用 Selenium 的 webdriver(for Firefox)运行 pytest。
1赞 Michael Mintz 6/28/2023 #29

的主要变化意味着,如果您升级版本,您将不再看到 Geckodriver 错误消息。 有一个内置的驱动程序管理器(现在完全退出测试版),如果您的系统上找不到它,它将自动为您下载。甚至方法 arg 也已从 中删除,如下所示:selenium4.10.0seleniumseleniumgeckodriverPATHexecutable_pathwebdriver.Firefox()

https://github.com/SeleniumHQ/selenium/commit/9f5801c82fb3be3d5850707c46c3f8176e3ccd8e

Changes_in_selenium_4_10_0

现在,这就是启动Firefox所需的全部内容,即使它不在您的系统路径上:

from selenium import webdriver
driver = webdriver.Firefox()
# ...
driver.quit()

要自定义 Firefox,请使用 和 参数:optionsservice

from selenium import webdriver
from selenium.webdriver.firefox.service import Service

service = Service()
options = webdriver.FirefoxOptions()
driver = webdriver.Firefox(service=service, options=options)
# ...
driver.quit()

(和以前一样,如果您的系统上找不到它,将自动下载。geckodriverPATH

2赞 John 6/29/2023 #30

我在 Linux 桌面上开发了一个脚本,用于部署在我的无头服务器上。我需要更新在 Windows 上运行的更新,但由于以下几个原因出现了同样的错误:

“selenium.common.exceptions.sessionnotcreatedexception:消息:预期的浏览器二进制位置,但无法在默认位置找到二进制文件,未提供'moz:firefoxoptions.binary'功能,并且未在命令行上设置二进制标志”

这是 Windows;我需要安装 Firefox,我可能搞砸了,因为它滞后了,而且我有一段时间有两个安装进度。

安装Firefox后,我发现了一个确认的解决方案(例如 https://stackoverflow.com/a/42122284),指示我使用:executable_path

from selenium import webdriver
driver = webdriver.Firefox(executable_path=r'your\path\geckodriver.exe')

自几年前以来,该参数就未被识别。相反,我需要一个实例。我将其添加到我的选项旁边,这是必需的,因为仍然找不到 Firefox(我不耐烦的双重安装可能归咎于此):Service

from selenium import webdriver
from selenium.webdriver import FirefoxOptions
from selenium.webdriver.firefox.service import Service
opts.binary_location = r"C:\Program Files\Mozilla Firefox\firefox.exe"
service = Service(r"C:\Users\pythonista\PycharmProjects\world_eater\geckodriver.exe")
driver = webdriver.Firefox(service=service, options=opts)

这是我目前唯一的硒项目,它可以管理自己的壁虎驱动程序。