我正在用Python文本阅读Sweigart的《自动化无聊的东西》。我正在使用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设置路径,但我不确定如何,所以我该如何做到这一点?


当前回答

saurabh的回答解决了这个问题,但它没有解释为什么用Python自动化无聊的东西不包括这些步骤。

这是因为本书是基于Selenium 2的。该系列的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之间的任何差异。

其他回答

令人遗憾的是,没有一本关于Selenium/Python的书籍以及通过谷歌发表的关于这个问题的大多数评论都没有清楚地解释在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*

这对我很管用。

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

克隆这个存储库:https://github.com/jackton1/script_install.git

cd script_install

Run

./installer --gecko-driver https://github.com/mozilla/geckodriver/releases/download/v0.18.0/geckodriver-v0.25.0-linux64.tar.gz

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

下载geckodriver 拷贝geckodriver到/usr/local/bin文件夹

不需要添加:

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

如果你使用虚拟环境和Windows 10(可能其他系统也一样),你只需要把geckodriver.exe放到虚拟环境目录下的以下文件夹中:

... my_virtual_env_directory \ \ geckodriver脚本。exe

在Ubuntu上手动安装geckodriver

访问https://github.com/mozilla/geckodriver/releases 下载最新版本“geckodriver-vX.XX.X-linux64.tar.gz” 解压缩tar -xvzf geckodriver-vX.XX.X-linux64.tar.gz 给geckodriver可执行权限(chmod +x geckodriver) 将geckodriver二进制文件移动到/usr/local/bin或系统路径上的任何位置。

Ubuntu上安装geckodriver的脚本:

#!/bin/bash

INSTALL_DIR="/usr/local/bin"

json=$(curl -s https://api.github.com/repos/mozilla/geckodriver/releases/latest)
url=$(echo "$json" | jq -r '.assets[].browser_download_url | select(contains("linux64"))')
curl -s -L "$url" | tar -xz
chmod +x geckodriver
sudo mv geckodriver "$INSTALL_DIR"
echo "installed geckodriver binary in $INSTALL_DIR"

这个答案完全抄袭自: Corey Goldberg对如何在Ubuntu中安装geckodriver的回答?