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

问题描述 投票:338回答:21

我是编程新手,大约2个月前开始使用Python,我正在使用Python文本浏览Sweigart的Automate the Boring Stuff。我正在使用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

During handling of the above exception, another exception occurred:

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
21个回答
283
投票

selenium.common.exceptions.WebDriverException:消息:'geckodriver'可执行文件需要在PATH中。

First of all you will need to download latest executable geckodriver from here to run latest firefox using selenium

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

  • 在Unix系统上,如果您使用的是与bash兼容的shell,则可以执行以下操作将其附加到系统的搜索路径: export PATH=$PATH:/path/to/directory/of/executable/downloaded/in/previous/step
  • 在Windows上,您需要更新Path系统变量以添加可执行geckodriver manuallycommand line的完整目录路径(在将可执行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)

6
投票

最简单的Windows方式! 从geckodriver下载最新版本的here。将geckodriver.exe文件添加到python目录(或已在PATH中的任何其他目录)。这应该可以解决问题(在Windows 10上测试)


3
投票

我实际上发现你可以使用最新的geckodriver而不是把它放在系统路径中。目前我正在使用

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

Firefox 50.1.0

Python 3.5.2

硒3.0.2

Windows 10

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

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

您可能还注意到我使用自定义的firefox配置文件来解决在您测试的站点具有不受信任的证书时将遇到的sec_error_unknown_issuer问题。见How to disable Firefox's untrusted connection warning using Selenium?

在调查后发现,木偶驾驶员仍然不完整且仍在进行中,并且没有设置各种能力或配置文件选项来解雇或设置证书。因此,使用自定义配置文件会更容易。

无论如何这里的代码是关于我如何让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')

3
投票

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

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

2
投票

很遗憾,没有一本关于Selenium / Python发表的书籍以及通过谷歌发表的关于这个问题的大部分评论都没有明确解释在Mac上设置它的路径逻辑(一切都是Windows !!!!)。你已经获得了路径设置(在我看来,便宜的出路!)。因此,对于精彩的Mac用户,请使用以下命令编辑bash路径文件:

> $ touch~ / .bash_profile;打开〜/ .bash_profile

然后添加类似这样的路径.... *#为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 *

这对我有用。我担心的是Selenium Windows社区什么时候开始玩真实的游戏,并将Mac用户纳入他们傲慢的俱乐部会员资格。


2
投票

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

Drivers
=======

Selenium requires a driver to interface with the chosen browser. Firefox,
for example, requires `geckodriver <https://github.com/mozilla/geckodriver/releases>`_, which needs to be installed before the below examples can be run. Make sure it's in your `PATH`, e. g., place it in `/usr/bin` or `/usr/local/bin`.

Failure to observe this step will give you an error `selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.

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


2
投票

对于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
投票

Ubuntu and Newest release of geckodriver

export GV=v0.24.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/

0
投票

Mac 10.12.1 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

0
投票

在Raspberry Pi上,我必须使用ARM驱动程序创建并在以下位置设置geckodriver和日志路径:

Sudano n / sr sr / l l l /ぃb / py 2 2. 7 /ーstぱs s s /ぇm m /ぇbdゔぇr /ぉぉx /ぇbdゔぇr。 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
投票

访问Gecko Driver从下载部分获取gecko驱动程序的URL。

克隆这个回购https://github.com/jackton1/script_install.git

cd script_install

./installer --gecko-driver url_to_gecko_driver


109
投票

这解决了我。

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

0
投票

我使用的是Windows 10和Anaconda2。我尝试设置系统路径变量,但没有成功。然后我只是将geckodriver.exe文件添加到Anaconda2 / Scripts文件夹中,现在一切正常。对我来说,路径是: -

C:\ Users \用户巴维亚\ Anaconda2 \脚本


0
投票

如果要在Windows 10上添加驱动程序路径:

  1. 右键单击“此PC”图标,然后选择“属性”enter image description here
  2. 点击“高级系统设置”
  3. 单击屏幕底部的“环境变量”
  4. 在“用户变量”部分中突出显示“路径”,然后单击“编辑”
  5. 通过单击“新建”并键入要添加的驱动程序的路径并按Enter键,将路径添加到变量中。
  6. 完成输入路径后,单击“确定”
  7. 继续单击“确定”,直到关闭所有屏幕

105
投票

这个步骤在ubuntu firefox 50上为我解决了。

  1. 下载geckodriver
  2. 在/ usr / local / bin中复制geckodriver

你不需要添加

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

26
投票

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

这是因为本书基于selenium 2.x而且该系列的Firefox驱动程序不需要gecko驱动程序。在开发selenium时,用于驱动浏览器的Gecko界面不可用。

selenium 2.x系列中的latest version是2.53.6(参见例如this answers,以便更容易地查看版本)。

2.53.6 version page根本没有提到壁虎。但是从版本3.0.2开始,文档explicitly states需要安装gecko驱动程序。

如果在升级之后(或安装在新系统上),你的软件在之前(或在你的旧系统上)运行良好的软件不再起作用并且你很匆忙,那就把你的virtualenv中的selenium版本固定下来

pip install selenium==2.53.6

但当然,开发的长期解决方案是使用最新版本的selenium设置新的virtualenv,安装gecko驱动程序并测试一切是否仍然按预期工作。但主要的版本可能会引入您的书中未涵盖的其他API更改,因此您可能希望坚持使用较旧的selenium,直到您有足够的信心可以自行修复selenium2和selenium3 API之间的任何差异。


15
投票

在已安装Homebrew的macOS上,您只需运行Terminal命令即可

$ brew install geckodriver

因为自制软件已经扩展了PATH,所以不需要修改任何启动脚本。


13
投票

为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 10中使用Python 3.6.2和Selenium WebDriver 3.4.3。

另一种设置geckodriver的方法:

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

self.driver = webdriver.Firefox()

7
投票

Steps for MAC:

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

Short Method:

1)下载并解压缩Geckodriver

2)启动驱动程序时提到路径:

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

Long Method:

1)下载并解压缩Geckodriver

2)打开.bash_profile。如果尚未创建它,可以使用以下命令执行此操作:touch ~/.bash_profile。然后使用:open ~/.bash_profile打开它

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

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

通过这个,您将GeckoDriver的路径附加到您的系统路径。这告诉系统在执行Selenium脚本时GeckoDriver的位置。

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

source ~/.bash_profile

5)就是这样。你完成了!您现在可以运行Python脚本。


7
投票

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

    conda install -c conda-forge geckodriver

6
投票

为此线程的未来读者提供一些额外的输入/说明:

以下足以作为Windows 7,Python 3.6,selenium 3.11的分辨率:

@ dsalaj在早期针对Unix的这个主题中的注释也适用于Windows;修补PATH环境。 Windows级别的变量可以避免重启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秒才能打开指定网址的Firefox浏览器。 (2)如果没有服务器已经在指定的URL上运行或者服务于包含字符串'Django'的页面,python控制台将显示以下错误:selenium.common.exceptions.WebDriverException:消息:已达到错误页面:about :neterror E = connectionFailure&U = HTTP%3A //本地主机%3A8000 /&C = UTF-8&F =定期&d =火狐%20can%E2%80%9

© www.soinside.com 2019 - 2024. All rights reserved.