使用 FF49 和 Python 的 Selenium 3.0.1 的 Firefox 驱动程序无法启动

Posted

技术标签:

【中文标题】使用 FF49 和 Python 的 Selenium 3.0.1 的 Firefox 驱动程序无法启动【英文标题】:Firefox driver can't start for Selenium 3.0.1 with FF49 and Python 【发布时间】:2017-03-20 05:32:38 【问题描述】:

我有使用 Python 的 Selenium Webdriver 脚本。但我得到了错误:

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

caps = DesiredCapabilities.FIREFOX
caps["marionette"] = True
driver = webdriver.Firefox(capabilities=caps)

driver.get("http://www.mahsumakbas.net")

print driver.title

driver.close()

错误是:

Traceback(最近一次调用最后一次):文件 "C:\Mahsum\DevelopmentWorkSpace\Eclipse\Java\selenium_proj\src\hello.py", 第 6 行,在 driver = webdriver.Firefox(capabilities=caps) 文件 "C:\Python27\lib\site-packages\selenium\webdriver\firefox\webdriver.py", 第 135 行,在 init 中 self.service.start() 文件 "C:\Python27\lib\site-packages\selenium\webdriver\common\service.py", 第 71 行,开始 os.path.basename(self.path),self.start_error_message)selenium.common.exceptions.WebDriverException:消息:'geckodriver' 可执行文件需要在 PATH 中。

Exception AttributeError: "'Service' 对象没有属性 '过程'" 在 > 忽略

Selenium Webdriver 版本为:3.0.1 火狐:49.0.2 geckodriver:v0.11.1-win64

我将 geckodriver 路径添加到 Windows PATH 变量。

问题出在哪里?

【问题讨论】:

看起来是 this 的副本。 你试过重启机器并运行脚本吗? 您可以尝试在 service.py 中的“os.path.basename(self.path)”行中打印路径 self.path 并检查 python 在哪里寻找可执行文件 (geckodriver.exe )? 【参考方案1】:

您可以将“geckodriver”.exe 放在 Python 的基本路径中,它会起作用。

或者,如果您希望拥有一个干净的 Python 文件夹,则必须在初始化时声明 geckodriver 的路径。每次运行脚本时都执行此操作,或者按照您所说的通过 PATH 执行。正如 Naveen 所建议的,在正确保存 PATH 之前需要重新启动。您也可以尝试在 Windows 命令行中运行它:

setx path "%path%;c:\path\to\geckodriver-folder"

【讨论】:

不要通过将 geckodriver 存储在它的基本目录中来拉取你的 python 安装【参考方案2】:

最终代码如下所示:

binary = FirefoxBinary("C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe")
driver = webdriver.Firefox(firefox_binary=binary)

将不带文件名的 geckodriver.exe 的路径(仅放置它的文件夹)设置为 PATH 变量。

这一次,我还有一个问题:

driver.close() 不会关闭 Firefox。 当更改为 driver.quit() 时,它会关闭,但控制台上会出现以下行:

“NoneType”对象没有“路径”属性

没有任何指示器表明它是警告或错误。自己排队。

【讨论】:

你能分享你的代码吗?似乎您有一个没有价值的对象,即NoneType。另外,如果我的回答对您有帮助,则将其标记为已接受并为您的新问题创建一个新问题。这就是 Stack 的工作原理 尝试添加firefox配置文件 profile = webdriver.FirefoxProfile() webdriver.Firefox(capabilities=caps,firefox_profile=profile) 你应该把你的评论写成答案,@patricmj,因为这样会更明显 - 你会因为它是实际的解决方案而获得声誉积分。 谢谢,我已经添加了带有答案的评论【参考方案3】:

尝试添加firefox配置文件

profile = webdriver.FirefoxProfile()
webdriver.Firefox(capabilities=caps,firefox_profile=profile)

【讨论】:

【参考方案4】:
from selenium import webdriver

# To Run on FireFox Browser
self.driver = webdriver.Firefox(executable_path="C:/Drivers/geckodriver.exe")

driver.get("http://www.mahsumakbas.net")

print(driver.title)
driver.close()

【讨论】:

虽然此代码可以解决 OP 的问题,但最好包含关于您的代码如何解决 OP 问题的说明。这样,未来的访问者可以从您的帖子中学习,并将其应用到他们自己的代码中。 SO 不是编码服务,而是知识资源。此外,高质量、完整的答案更有可能获得支持。这些功能,以及所有帖子都是独立的要求,是 SO 作为一个平台的一些优势,使其与论坛区分开来。您可以编辑以添加其他信息和/或使用源文档补充您的解释。

以上是关于使用 FF49 和 Python 的 Selenium 3.0.1 的 Firefox 驱动程序无法启动的主要内容,如果未能解决你的问题,请参考以下文章

Python3.5 和 FF48 的 Selenium WebDriver 出现“无法加载配置文件”错误

python的re,findall 忽略大小写

Python如何实现自动登录和下单的脚本,请看selenium的表演

python 发送--no-ff和评论约定

JQuery hide()/show() 在 FF/IE 但不是 Chrome

使用python从MAC获取IP地址