python-3.x - 尽管驱动程序位于 /usr/local/bin 中,但 Selenium “无法找到一组匹配的功能”
问题描述
我试图使用 selenium webdriver 打开 Firefox 浏览器。我已经有了我的 geckodriver,/usr/local/bin
因为我正在从事网络抓取和爬行项目。
- Geckodriver 21.0 版
- Firefox 64.0 版(量子)
- Selenium 版本 - 3.141.0。
还尝试了 17.0、19.0、23.0 等版本的 geckodriver;找到组合。
我尝试过的是以下代码。
from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup
driver=webdriver.Firefox()
driver.get("https://kissanime.ru/")
driver.maximize_window()
执行代码时出现错误:
Traceback (most recent call last):
File "downloader.py", line 9, in <module>
driver=webdriver.Firefox()
File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/firefox/webdriver.py", line 174, in __init__
keep_alive=True)
File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
self.start_session(capabilities, browser_profile)
File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.SessionNotCreatedException: Message: Unable to find a matching set of capabilities
解决方案
此错误消息...
selenium.common.exceptions.SessionNotCreatedException: Message: Unable to find a matching set of capabilities
...暗示GeckoDriver无法启动/产生新的WebBrowsing 会话,即Firefox 浏览器会话。
您的主要问题可能是您使用的二进制文件版本之间的不兼容,如下所示:
解决方案
- 将Selenium升级到当前级别版本 3.141.59。
- 将GeckoDriver升级到GeckoDriver v0.23.0级别。
- 确保 GeckoDriver 存在于指定位置。
- 确保 GeckoDriver 对非 root 用户具有可执行权限。
- 将Firefox版本升级到Firefox v64.0。水平。
- 通过IDE清理项目工作区并仅使用所需的依赖项重建项目。
- (仅限Windows 操作系统)使用CCleaner工具在执行测试套件之前和之后清除所有操作系统琐事。
- (仅限 LinuxOS)在执行测试套件之前和之后释放和释放 Ubuntu/Linux Mint 中未使用/缓存的内存。
- 如果您的基本Web 客户端版本太旧,请通过Revo Uninstaller卸载它并安装最新的 GA 和发布版本的Web 客户端。
- 重新启动系统。
在启动 WebDriver/WebBrowser 会话时传递参数executable_path以及GeckoDriver的绝对路径,如下所示:
Windows 操作系统格式:
driver = webdriver.Firefox(executable_path=r'C:\path\to\geckodriver.exe')
Linux和MAC OS X格式:
driver = webdriver.Firefox(executable_path='/path/to/geckodriver')
Test
以非 root 用户身份执行。- 始终
driver.quit()
在tearDown(){}
方法内调用以优雅地关闭和销毁WebDriver和Web 客户端实例。
推荐阅读
- python - 如何阅读第 1 列和第 2 列,以及第 n 列到最后一列。麻木的
- java - 将 Firebase 存储与 Firebase Cloud Firestore Android Java 关联
- c# - 如何在 C# WPF 中禁用鼠标按钮?
- c - 如何在同一行中使用 %d 作为十进制整数和 %f?
- java - Spring Boot Rest Controller 上的 HttpMediaTypeNotAcceptableException 以下载 csv 文件
- html - JSF H:commandButton 'type=reset' 不调用动作,'type=button' 充当提交
- powershell - 使用 PowerShell 进行多人 IF 的更好方法
- javascript - 如何在 onBlur 发生之前运行 onClick?
- web - 如何将 Marvin 框架添加到在 tomcat 上运行的动态 Web 项目中?
- javascript - 标签未打开弹出窗口