我正在尝试关注Selenium的教程,http://selenium-python.readthedocs.io/getting-started.html。我已下载最新版本的geckodriver
并将其复制到/usr/local/bin
。但是,当我尝试
from selenium import webdriver
driver = webdriver.Firefox()
我收到以下错误消息:
Traceback (most recent call last):
File "/Users/kurtpeek/Documents/Scratch/selenium_getting_started.py", line 4, in <module>
driver = webdriver.Firefox()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 152, in __init__
keep_alive=True)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 98, in __init__
self.start_session(desired_capabilities, browser_profile)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 188, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in execute
self.error_handler.check_response(response)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 194, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: Unable to find a matching set of capabilities
[Finished in 1.2s with exit code 1]
从https://github.com/SeleniumHQ/selenium/issues/3884开始,似乎其他用户遇到类似问题,但Selenium团队无法重现它。如何让Selenium使用Firefox? (它确实与chromedriver
和webdriver.Chrome()
实例一起使用,所以我怀疑这可能是Selenium中的一个错误。)
答案 0 :(得分:19)
更新Firefox和Selenium为我解决了这个问题。但是,我并没有假装对根本原因做出解释。
我还使用Geckodriver
重新安装/更新Homebrew
并明确将其用作Selenium WebDriver
的可执行文件,但事实证明,没有必要缓解<{1}} em>&#34;无法找到匹配的功能集&#34; 错误。
答案 1 :(得分:10)
作为旁注,请确保您的geckodriver具有正确的32 / 64bit版本。
答案 2 :(得分:9)
我遇到了同样的问题,该问题与使用Firefox ESR有关(我在Debian上)。更具体地说,我在Debian 10上使用64位Firefox 68.11.0esr,python3.7,Selenium 3.141.0和geckodriver 0.27.0。
这是我使用的失败的标准示例:
from selenium import webdriver
browser = webdriver.Firefox()
browser.get("http://google.com")
根据this answer中的建议,我进行了更改:
browser = webdriver.Firefox()
到
browser = webdriver.Firefox(firefox_binary="/usr/bin/firefox-esr")
成功了。
如果您不知道firefox-esr的路径,则可以在命令行上运行sudo find / -name firefox-esr
。应该有几个。
答案 3 :(得分:6)
对我而言,仅仅升级FF就足够了
答案 4 :(得分:2)
当我使用硒firefox()时,我遇到了完全相同的问题
>> webdriver.Firefox()
它不起作用:抛出 “无法找到匹配的功能集”之类的错误
然后我安装了 geckodriver.exe ,并将该.exe文件放在两个目录中
C:\Users\<USER-NAME>\AppData\Local\Programs\Python\Python36\Scripts
和
C:\Users\<USER-NAME>\AppData\Local\Programs\Python\Python36\
并在环境设置
中设置这两个路径然后开始工作
答案 5 :(得分:1)
在这里分享我的成功案例
注意:请记住这里的架构,Window 64/32或Linux 64/32。确保下载正确的64/32位Selenium Webdriver,64/32 Geckodriver。
我的配置如下:
Linux: Centos 7 64bit, Window 7 64bit
Firefox: 52.0.3
Selenium Webdriver: 3.4.0 (Windows), 3.8.1 (Linux Centos
)
GeckoDriver: v0.16.0 (Windows), v0.17.0 (Linux Centos)
工作代码(没有代理设置)
System.setProperty("webdriver.gecko.driver", "/home/seleniumproject/geckodrivers/linux/v0.17/geckodriver");
ProfilesIni ini = new ProfilesIni();
// Change the profile name to your own. The profile name can
// be found under .mozilla folder ~/.mozilla/firefox/profile.
// See you profile.ini for the default profile name
FirefoxProfile profile = ini.getProfile("default");
DesiredCapabilities cap = new DesiredCapabilities();
cap.setAcceptInsecureCerts(true);
FirefoxBinary firefoxBinary = new FirefoxBinary();
GeckoDriverService service =new GeckoDriverService.Builder(firefoxBinary)
.usingDriverExecutable(new File("/home/seleniumproject/geckodrivers/linux/v0.17/geckodriver"))
.usingAnyFreePort()
.build();
try {
service.start();
} catch (IOException e) {
e.printStackTrace();
}
FirefoxOptions options = new FirefoxOptions().setBinary(firefoxBinary).setProfile(profile).addCapabilities(cap);
driver = new FirefoxDriver(options);
driver.get("https://www.google.com");
System.out.println("Life Title -> " + driver.getTitle());
driver.close();
工作代码(使用代理设置)
System.setProperty("webdriver.gecko.driver", "/home/seleniumproject/geckodrivers/linux/v0.17/geckodriver");
String PROXY = "my-proxy.co.jp";
int PORT = 8301;
ProfilesIni ini = new ProfilesIni();
// Change the profile name to your own. The profile name can
// be found under .mozilla folder ~/.mozilla/firefox/profile.
// See you profile.ini for the default profile name
FirefoxProfile profile = ini.getProfile("default");
com.google.gson.JsonObject json = new com.google.gson.JsonObject();
json.addProperty("proxyType", "manual");
json.addProperty("httpProxy", PROXY);
json.addProperty("httpProxyPort", PORT);
json.addProperty("sslProxy", PROXY);
json.addProperty("sslProxyPort", PORT);
DesiredCapabilities cap = new DesiredCapabilities();
cap.setAcceptInsecureCerts(true);
cap.setCapability("proxy", json);
FirefoxBinary firefoxBinary = new FirefoxBinary();
GeckoDriverService service =new GeckoDriverService.Builder(firefoxBinary)
.usingDriverExecutable(new File("/home/seleniumproject/geckodrivers/linux/v0.17/geckodriver"))
.usingAnyFreePort()
.usingAnyFreePort()
.build();
try {
service.start();
} catch (IOException e) {
e.printStackTrace();
}
FirefoxOptions options = new FirefoxOptions().setBinary(firefoxBinary).setProfile(profile).addCapabilities(cap);
driver = new FirefoxDriver(options);
driver.get("https://www.google.com");
System.out.println("Life Title -> " + driver.getTitle());
driver.close();
答案 6 :(得分:1)
我有同样的问题。我的geckodriver是32位,fireFox是64位。已通过将geckodriver更新为64位来解决。
答案 7 :(得分:1)
以下是为我解决的解决方案。不要忽略这一点:确保您使用的是正确的32/64位版本的二进制文件-应该统一-例如如果Firefox是64位的,则必须是geckodriver。
答案 8 :(得分:0)
Mac用户在这里。
我通过确保Firefox命名为&#34; Firefox&#34;来修复此问题。在&#34;应用程序&#34;夹。我打电话给它&#34; Firefox 58&#34;之前(我有多个版本)。
答案 9 :(得分:0)
在DigitalOcean的小滴上遇到了相同的错误-未安装FireFox。堆栈跟踪错误如下所示-
exception_class
<class 'selenium.common.exceptions.SessionNotCreatedException'>
json
<module 'json' from '/usr/lib/python3.5/json/__init__.py'>
message
'Unable to find a matching set of capabilities'
response
{'status': 500,
'value': '{"value":{"error":"session not created","message":"Unable to find a '
'matching set of capabilities","stacktrace":""}}'}
screen
None
self
<selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x7f428e3f10f0>
stacktrace
None
status
'session not created'
value
{'error': 'session not created',
'message': 'Unable to find a matching set of capabilities',
'stacktrace': ''}
value_json
('{"value":{"error":"session not created","message":"Unable to find a matching '
'set of capabilities","stacktrace":""}}')
答案 10 :(得分:0)
就我而言,我只有Firefox Developer Edition,但仍然会出现相同的错误。
安装标准Firefox版本后,即可解决。
答案 11 :(得分:0)
似乎不同的解决方法似乎使错误消失了。确保已经下载并安装了Firefox和geckodriver.exe的64位版本后,请使用geckodriver.exe的位置更新PATH。 在之前,可能还需要帮助的是启动geckodriver.exe,它会打开一个类似于cmd的窗口。现在,如果您运行py脚本,则不应遇到以下错误:
selenium.common.exceptions.SessionNotCreatedException: Message: Unable to find a matching set of capabilities