使用 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如何实现自动登录和下单的脚本,请看selenium的表演