WebDriverException:消息:无法加载配置文件。可能是 firefox 版本不匹配。对于带有 Selenium 的 Firefox 48+,您必须使用 GeckoDriver 代替
WebDriverException: Message: Can't load the profile. Possible firefox version mismatch. You must use GeckoDriver instead for Firefox 48+with Selenium
我尝试 follow an example 如何通过 python 和 selenium 解析网站。
但我 运行 总是遇到以下问题:调用函数 webdriver.Firefox
打开一个 firefox 实例,但无法通过 get 调用任何网站,似乎:整个代码在 Firefox 函数中阻塞(请参阅:print(“打开调用从未达到”))浏览器正在打开并在 ca 之后。 30 秒异常导致浏览器退出,并显示消息:
selenium.common.exceptions.WebDriverException: Message: Can't load the profile. Possible firefox version mismatch. You must use GeckoDriver instead for Firefox 48+. Profile Dir: /tmp/tmpl5dm_azd If you specified a log_file in the FirefoxBinary constructor, check it for details
那我哪里错了?我怎样才能正确设置配置文件?
我尝试将 marionette 模式设置为 True,但出现错误:“无法找到匹配的功能集”
from selenium.webdriver import Firefox
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
cap = DesiredCapabilities().FIREFOX
cap["marionette"] = False
options = Options()
options.log.level = "trace"
options.headless = True
binary = FirefoxBinary("/usr/bin/firefox")
pathDriver = "./geckodriver"
testUrl="https://duckduckgo.com/"
print("will create firefox instance")
browser = webdriver.Firefox(firefox_binary=binary,options=options,capabilities=cap,executable_path=pathDriver)
print("open call never reached")
browser.get(testUrl)
webdriver.quit()
我的测试环境:
$ name -a
Linux 5.5.0-0.bpo.2-amd64 #1 SMP Debian 5.5.17-1~bpo10+1 (2020-04-23) x86_64 GNU/Linux
我还下载了最新的selenium和geckodriver
在这里查看我使用的版本:
$ python3 –version
Python 3.7.3
$ pip3 freeze | grep sel
selenium==3.141.0
$ geckodriver -V
geckodriver 0.27.0 (7b8c4f32cdde 2020-07-28 18:16 +0000)
$ which firefox
/usr/bin/firefox
$ firefox -v
Mozilla Firefox 68.10.0esr
您为 DesiredCapabilities 添加了括号
cap = DesiredCapabilities.FIREFOX
cap['marionette'] = False
或者您可以使用 webdriver_manager 库,这将有助于摆脱许多令人头疼的问题
pip install webdriver_manager
并像这样使用它
from webdriver_manager.firefox import GeckoDriverManager
from selenium.webdriver import DesiredCapabilities
options = webdriver.FirefoxOptions()
options.log.level = "trace"
options.headless = True
capabilities = DesiredCapabilities.FIREFOX
capabilities["marionette"] = False
driver = webdriver.Firefox(executable_path=GeckoDriverManager().install(), options=options)
此设置可帮助您获得最新的 selenium 浏览器版本,您的错误可能是由版本不匹配引起的
强制使用GeckoDriver to initiate/spawn a new Browsing Context i.e. Firefox Browser session with Firefox 48+ versions, you have to use 时。
解决方案
解决方案是使用默认设置 marionette 或将 marionette
更改为 True如下:
cap = DesiredCapabilities().FIREFOX
cap["marionette"] = True
我尝试 follow an example 如何通过 python 和 selenium 解析网站。 但我 运行 总是遇到以下问题:调用函数 webdriver.Firefox 打开一个 firefox 实例,但无法通过 get 调用任何网站,似乎:整个代码在 Firefox 函数中阻塞(请参阅:print(“打开调用从未达到”))浏览器正在打开并在 ca 之后。 30 秒异常导致浏览器退出,并显示消息:
selenium.common.exceptions.WebDriverException: Message: Can't load the profile. Possible firefox version mismatch. You must use GeckoDriver instead for Firefox 48+. Profile Dir: /tmp/tmpl5dm_azd If you specified a log_file in the FirefoxBinary constructor, check it for details
那我哪里错了?我怎样才能正确设置配置文件? 我尝试将 marionette 模式设置为 True,但出现错误:“无法找到匹配的功能集”
from selenium.webdriver import Firefox
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
cap = DesiredCapabilities().FIREFOX
cap["marionette"] = False
options = Options()
options.log.level = "trace"
options.headless = True
binary = FirefoxBinary("/usr/bin/firefox")
pathDriver = "./geckodriver"
testUrl="https://duckduckgo.com/"
print("will create firefox instance")
browser = webdriver.Firefox(firefox_binary=binary,options=options,capabilities=cap,executable_path=pathDriver)
print("open call never reached")
browser.get(testUrl)
webdriver.quit()
我的测试环境:
$ name -a
Linux 5.5.0-0.bpo.2-amd64 #1 SMP Debian 5.5.17-1~bpo10+1 (2020-04-23) x86_64 GNU/Linux
我还下载了最新的selenium和geckodriver 在这里查看我使用的版本:
$ python3 –version
Python 3.7.3
$ pip3 freeze | grep sel
selenium==3.141.0
$ geckodriver -V
geckodriver 0.27.0 (7b8c4f32cdde 2020-07-28 18:16 +0000)
$ which firefox
/usr/bin/firefox
$ firefox -v
Mozilla Firefox 68.10.0esr
您为 DesiredCapabilities 添加了括号
cap = DesiredCapabilities.FIREFOX
cap['marionette'] = False
或者您可以使用 webdriver_manager 库,这将有助于摆脱许多令人头疼的问题
pip install webdriver_manager
并像这样使用它
from webdriver_manager.firefox import GeckoDriverManager
from selenium.webdriver import DesiredCapabilities
options = webdriver.FirefoxOptions()
options.log.level = "trace"
options.headless = True
capabilities = DesiredCapabilities.FIREFOX
capabilities["marionette"] = False
driver = webdriver.Firefox(executable_path=GeckoDriverManager().install(), options=options)
此设置可帮助您获得最新的 selenium 浏览器版本,您的错误可能是由版本不匹配引起的
强制使用GeckoDriver to initiate/spawn a new Browsing Context i.e. Firefox Browser session with Firefox 48+ versions, you have to use
解决方案
解决方案是使用默认设置 marionette 或将 marionette
更改为 True如下:
cap = DesiredCapabilities().FIREFOX
cap["marionette"] = True