Python 3 Selenium KeyError:'value'问题不会初始化Firefox的Geckodriver

时间:2017-06-08 23:26:08

标签: python selenium firefox keyerror geckodriver

我在使用Python 3运行geckodriver时遇到问题。我最近使用我一直在处理的应用程序切换到Python 3,并更新了Firefox(53.0),Selenium(3.4.3)和geckodriver(0.17) 0.1)。我也在使用OSX并使用pip来安装我的所有软件包。

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

# Set Firefox Settings
# binary = FirefoxBinary('Users/username/Applications/Firefox.app/Contents/MacOS/firefox')
# binary = FirefoxBinary('/Applications/Firefox.app/Contents/MacOS/firefox')
# binary = FirefoxBinary('/Applications/Firefox.app/Contents/MacOS/firefox-bin')

path = '/usr/local/bin/geckodriver'
profile = webdriver.FirefoxProfile()

browser = webdriver.Firefox(executable_path=path,
                        firefox_profile=profile,
                        firefox_binary=binary)

browser.get("http://google.com")

Web浏览器将启动,但之后我将收到以下错误:

Traceback (most recent call last):
File "/Users/jphubert/Desktop/AbstractionProject/py/browsertest.py", line 11, in <module>
firefox_profile=profile),
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/selenium/webdriver/firefox/webdriver.py", line 155, in __init__
keep_alive=True)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 92, in __init__
self.start_session(desired_capabilities, browser_profile)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 183, in start_session
self.capabilities = response['value']
KeyError: 'value'

我已经卸载并重新安装了Firefox和geckodriver,采取@Viragos建议以确保我安装了MacOS版本。 @Debanjan让我走上了正确的轨道,尝试设置Firefox二进制文件并将其包含在webdriver配置文件中,但我仍然遇到同样的错误。

我尝试从GitHub获取Firefox二进制文件并将其放在.py文件中,并尝试删除配置文件和可执行文件路径,但同样的问题仍然存在。我的二进制文件位于正确的位置,如果我自己按照路径并单击它们的.exe文件,它就可以工作了,但我不能让我的脚本运行了。

我一直在运行Selenium而没有任何Python 2.7问题,只是从昨天开始升级gecko和Python,我遇到了问题。

谢谢!

3 个答案:

答案 0 :(得分:0)

以下是您的问题的答案:

使用Selenium 3.4.x,Python 3.6.1以及geckodriver v0.16.1&amp; Mozilla Firefox 53.0,您可以配置以下参数:

  1. firefox_binary:提供您打算使用的确切Firefox二进制文件的绝对路径。
  2. firefox_profile:指定是否要从新的/现有的Firefox配置文件开始。
  3. executable_path:指定geckodriver.exe的绝对路径。
  4.   

    需要注意的是,当前的Selenium-Python绑定在geckodriver中是不稳定的,并且看起来是特定于架构的。您可以在此处找到github discussionmerge。因此,在初始化 webdriver

    时,您可能还需要将firefox二进制文件的绝对路径作为firefox_binary参数传递

    以下代码块将根据我们通过前面提到的参数设置的配置打开Firefox浏览器:

    from selenium import webdriver
    from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
    
    binary = FirefoxBinary('C:\\Program Files\\Mozilla Firefox\\firefox.exe')
    profile = webdriver.FirefoxProfile()
    path = "C:\\Utility\\BrowserDrivers\\geckodriver.exe"
    
    browser = webdriver.Firefox(executable_path=path, firefox_profile=profile,firefox_binary=binary)
    browser.get("http://google.com")
    

    如果这回答你的问题,请告诉我。

答案 1 :(得分:0)

更新到geckodriver 0.17.0为我解决了问题 Firefox 53.0.3
硒3.4.3
Python 3.6

binary = FirefoxBinary('C:\\Program Files (x86)\\Mozilla Firefox\\Firefox.exe')
driver = webdriver.Firefox(firefox_binary=binary) 
driver.get(url)

答案 2 :(得分:0)

当我尝试在Pycharm中使用geckodriver在家里运行代码时,我也遇到了这个问题。我将geckodriver文件夹添加到“系统环境路径”中。然后我更新了Pycharm以及Selenium版本,然后它解决了这个问题。 在更新我的Selenium版本之前,我可以从CMD运行代码。在Pycharm中更新Selenium版本之后。再次正常工作。很奇怪。

我也尝试过在之前添加geckodriver路径,但这并不能解决问题。

driverPath = 'C:\\Users\\xxx\\OneDrive\\xxx\\geckodriver.exe'
driver = webdriver.Firefox(firefox_profile=profile, executable_path=driverPath)