MSEdgeDriver (Chromium) 不适用于版本 >= 79.0.313 (Canary)
MSEdgeDriver (Chromium) does not work with version >= 79.0.313 (Canary)
我在脚本中使用带有 Python3 的 Microsoft Edge Webdriver (Chromium)。
webdriver配置如下:
driveroptions = Options()
driveroptions.add_argument('--inprivate')
driveroptions.add_argument('--disable-infobars')
driveroptions.add_argument('--start-maximized')
driveroptions.add_argument('--auto-open-devtools-for-tabs')
driveroptions.add_argument('--user-data-dir=D:\Selenium_Edge_Chromium_UserData')
driveroptions.binary_location = "C:\Users\Administrator\AppData\Local\Microsoft\Edge SxS\Application\msedge.exe"
# driver = webdriver.Chrome(options=driveroptions, executable_path="msedgedriver.309.exe", service_log_path="D:\X.txt")
driver = webdriver.Chrome(options=driveroptions, executable_path="msedgedriver.exe", service_log_path="D:\X.txt")
driver.set_page_load_timeout(40)
wait = WebDriverWait(driver, 40)
driver.get(base_url)
以前运行良好,但从 79.0.313.0 开始,驱动程序只是 returns 错误:
Message: session not created: No matching capabilities found
这里的服务日志:
[1572262712.029][INFO]: Starting MSEdgeDriver 80.0.315.0 (9e44865e0573123f4459e64bc4e043fee13eb7ec)
[1572262712.029][INFO]: Please protect ports used by MSEdgeDriver and related test frameworks to prevent access by malicious code.
[1572262712.567][INFO]: [0b47b609c87652c1d1f004bfac456076] COMMAND InitSession {
"capabilities": {
"alwaysMatch": {
"browserName": "chrome",
"goog:chromeOptions": {
"args": [ "--inprivate", "--disable-infobars", "--start-maximized", "--auto-open-devtools-for-tabs", "--user-data-dir=D:\Selenium_Edge_Chromium_UserData" ],
"binary": "C:\Users\Administrator\AppData\Local\Microsoft\Edge SxS\Application\msedge.exe",
"extensions": [ ]
},
"platformName": "any"
},
"firstMatch": [ {
} ]
},
"desiredCapabilities": {
"browserName": "chrome",
"goog:chromeOptions": {
"args": [ "--inprivate", "--disable-infobars", "--start-maximized", "--auto-open-devtools-for-tabs", "--user-data-dir=D:\Selenium_Edge_Chromium_UserData" ],
"binary": "C:\Users\Administrator\AppData\Local\Microsoft\Edge SxS\Application\msedge.exe",
"extensions": [ ]
},
"platform": "ANY",
"version": ""
}
}
[1572262712.571][INFO]: [0b47b609c87652c1d1f004bfac456076] RESPONSE InitSession ERROR session not created: No matching capabilities found
如果 msededriver 版本保持在 79.0.309.0,我仍然可以使用我的脚本。
但是较新版本的 msededriver(79.0.313.0、80.0.315.0 等)发生了什么?
他们是否放弃了一些支持的功能?
已更新:
Microsoft Edge (Chromium): 80.0.315.0
msedgedriver for Microsoft Edge (Chromium): 80.0.315.0
->
Message: session not created: No matching capabilities found
Microsoft Edge (Chromium): 79.0.313.0
msedgedriver for Microsoft Edge (Chromium): 79.0.313.0
->
Message: session not created: No matching capabilities found
Microsoft Edge (Chromium): 79.0.309.0
msedgedriver for Microsoft Edge (Chromium): 79.0.309.0
->
(Works well without issue)
以及 79.0.309.0(及更早版本)msededriver:
Microsoft Edge (Chromium): (version before 79.0.309.0)
msedgedriver for Microsoft Edge (Chromium): (version before 79.0.309.0, = browser version)
->
(Works without issue)
Microsoft Edge (Chromium): 79.0.309.0
msedgedriver for Microsoft Edge (Chromium): 79.0.309.0
->
(Works without issue)
Microsoft Edge (Chromium): 79.0.313.0
msedgedriver for Microsoft Edge (Chromium): 79.0.309.0
->
(Works without issue)
Microsoft Edge (Chromium): 80.0.315.0
msedgedriver for Microsoft Edge (Chromium): 79.0.309.0
->
(Works without issue)
PS:
我的 GetEdgeDriver.BAT 将当前安装的 Microsoft Edge (Chromium) Canary 浏览器的版本与当前从 https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/ 下载的 webdriver 进行比较。如果后者低于前者,它会下载 msedgedriver.exe 并覆盖旧的。
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
REM GNUWIN32 required
REM SET ONEDRIVE=%UserProfile%\OneDrive
REM This file is located in OneDrive\Files\BIN
SET ONEDRIVE=%~DP0..\..
SET EDGE_DIR=%UserProfile%\AppData\Local\Microsoft\Edge SxS\Application
IF NOT EXIST "%EDGE_DIR%\msedge.exe" ECHO MSEdge not found at %EDGE_DIR%! & GOTO :EOF
FOR /F %%I IN ('DIR /B "%EDGE_DIR%" ^| grep -E [0-9]+\.[0-9]+\.') DO SET MSEDGE_VERSION=%%I& GOTO :MSEDGE_VERSION_RETRIEVED
:MSEDGE_VERSION_RETRIEVED
ECHO MSEdge browser version: %MSEDGE_VERSION%
FOR /F %%I IN ('MSEDGEDRIVER -V ^| awk "{print }"') DO SET HAVE_DRIVER_VERSION=%%I& GOTO :HAVE_DRIVER_VERSION_RETRIEVED
:HAVE_DRIVER_VERSION_RETRIEVED
ECHO MSEdge driver version in OneDrive: %HAVE_DRIVER_VERSION%
REM e.g. https://msedgedriver.azureedge.net/79.0.287.0/edgedriver_win64.zip
IF %MSEDGE_VERSION% GTR %HAVE_DRIVER_VERSION% (
SET URL=https://msedgedriver.azureedge.net/%MSEDGE_VERSION%/edgedriver_win64.zip
ECHO.
ECHO Downloading !URL! -^> %TEMP%\edgedriver_win64_%MSEDGE_VERSION%.zip
REM -C -
REM continue previous download and skip if existing download
REM -k --insecure
curl -C - -s -L -k -o "%TEMP%\edgedriver_win64_%MSEDGE_VERSION%.zip" -g "!URL!"
REM curl -C - -s -L --insecure -o "%TEMP%\edgedriver_win64_%MSEDGE_VERSION%.zip" -g "!URL!"
REM unzip -uoqq "%TEMP%\edgedriver_win64_%MSEDGE_VERSION%.zip"
ECHO Extracting %TEMP%\edgedriver_win64_%MSEDGE_VERSION%.zip -^> %~DP0msedgedriver.exe
REM extract msedgedriver.exe inside edgedriver_win64_%MSEDGE_VERSION%.zip to %ONEDRIVE%\Files\BIN folder with the same name
REM 7z x -y -o"C:\Users\Administrator\OneDrive\Files\BIN" "%TEMP%\edgedriver_win64_%MSEDGE_VERSION%.zip" msedgedriver.exe > nul
7z x -y -o"%ONEDRIVE%\Files\BIN" "%TEMP%\edgedriver_win64_%MSEDGE_VERSION%.zip" msedgedriver.exe > nul
REM MSEDGEDRIVER -V
FOR /F %%I IN ('MSEDGEDRIVER -V ^| awk "{print }"') DO SET HAVE_DRIVER_VERSION=%%I& GOTO :NEW_DRIVER_VERSION_RETRIEVED
:NEW_DRIVER_VERSION_RETRIEVED
ECHO New MSEdge driver version in OneDrive: %HAVE_DRIVER_VERSION%
)
我试过下面的功能,效果不错,你可以试试:
{
"desiredCapabilities": {
"nativeEvents": false,
"browserName": "chrome",
"version": "",
"platform": "ANY",
"javascriptEnabled": true,
...
}
}
浏览器和 webdriver 必须匹配版本号的前 3 个元组。
在 chrome 中有一个版本检查会告诉您浏览器和网络驱动程序是否不匹配。 msedge 给出了更漫:No matching capabilities found
我正在使用安装 msedge 浏览器的巧克力 Microsoft Edge Insider - Beta
,它目前的版本是 79.0.309.65。
这意味着我无法使用目前为 79.0.313.0 的最新 79.x msededriver,我必须使用 79.0.309.x.
我在我的 selenium 驱动程序中实施了一个简单的测试,在开始之前检查这个。
终于解决了我的问题
- Install/Upgrade 硒 3.14 到 Selenium 4.0.0a5
- 将 Python 代码更改为如下所示:
# using edge directly, since you can see 'selenium.webdriver.chromium.webdriver' used in site-packages\selenium\webdriver\edge\webdriver.py
from selenium import webdriver
from selenium.webdriver.edge.options import Options
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.webdriver import WebDriver
...
...
driveroptions = Options()
# remember to set use_chromium
driveroptions.use_chromium = True
driveroptions.add_argument('--start-maximized')
driveroptions.binary_location = env_programfiles_x86 + "\Microsoft\Edge\Application\msedge.exe"
service = Service(executable_path="msedgedriver.exe")
driver = webdriver.Edge(options=driveroptions, service=service)
driver.set_page_load_timeout(40)
driver.get(page_url)
我在脚本中使用带有 Python3 的 Microsoft Edge Webdriver (Chromium)。
webdriver配置如下:
driveroptions = Options()
driveroptions.add_argument('--inprivate')
driveroptions.add_argument('--disable-infobars')
driveroptions.add_argument('--start-maximized')
driveroptions.add_argument('--auto-open-devtools-for-tabs')
driveroptions.add_argument('--user-data-dir=D:\Selenium_Edge_Chromium_UserData')
driveroptions.binary_location = "C:\Users\Administrator\AppData\Local\Microsoft\Edge SxS\Application\msedge.exe"
# driver = webdriver.Chrome(options=driveroptions, executable_path="msedgedriver.309.exe", service_log_path="D:\X.txt")
driver = webdriver.Chrome(options=driveroptions, executable_path="msedgedriver.exe", service_log_path="D:\X.txt")
driver.set_page_load_timeout(40)
wait = WebDriverWait(driver, 40)
driver.get(base_url)
以前运行良好,但从 79.0.313.0 开始,驱动程序只是 returns 错误:
Message: session not created: No matching capabilities found
这里的服务日志:
[1572262712.029][INFO]: Starting MSEdgeDriver 80.0.315.0 (9e44865e0573123f4459e64bc4e043fee13eb7ec)
[1572262712.029][INFO]: Please protect ports used by MSEdgeDriver and related test frameworks to prevent access by malicious code.
[1572262712.567][INFO]: [0b47b609c87652c1d1f004bfac456076] COMMAND InitSession {
"capabilities": {
"alwaysMatch": {
"browserName": "chrome",
"goog:chromeOptions": {
"args": [ "--inprivate", "--disable-infobars", "--start-maximized", "--auto-open-devtools-for-tabs", "--user-data-dir=D:\Selenium_Edge_Chromium_UserData" ],
"binary": "C:\Users\Administrator\AppData\Local\Microsoft\Edge SxS\Application\msedge.exe",
"extensions": [ ]
},
"platformName": "any"
},
"firstMatch": [ {
} ]
},
"desiredCapabilities": {
"browserName": "chrome",
"goog:chromeOptions": {
"args": [ "--inprivate", "--disable-infobars", "--start-maximized", "--auto-open-devtools-for-tabs", "--user-data-dir=D:\Selenium_Edge_Chromium_UserData" ],
"binary": "C:\Users\Administrator\AppData\Local\Microsoft\Edge SxS\Application\msedge.exe",
"extensions": [ ]
},
"platform": "ANY",
"version": ""
}
}
[1572262712.571][INFO]: [0b47b609c87652c1d1f004bfac456076] RESPONSE InitSession ERROR session not created: No matching capabilities found
如果 msededriver 版本保持在 79.0.309.0,我仍然可以使用我的脚本。
但是较新版本的 msededriver(79.0.313.0、80.0.315.0 等)发生了什么?
他们是否放弃了一些支持的功能?
已更新:
Microsoft Edge (Chromium): 80.0.315.0
msedgedriver for Microsoft Edge (Chromium): 80.0.315.0
->
Message: session not created: No matching capabilities found
Microsoft Edge (Chromium): 79.0.313.0
msedgedriver for Microsoft Edge (Chromium): 79.0.313.0
->
Message: session not created: No matching capabilities found
Microsoft Edge (Chromium): 79.0.309.0
msedgedriver for Microsoft Edge (Chromium): 79.0.309.0
->
(Works well without issue)
以及 79.0.309.0(及更早版本)msededriver:
Microsoft Edge (Chromium): (version before 79.0.309.0)
msedgedriver for Microsoft Edge (Chromium): (version before 79.0.309.0, = browser version)
->
(Works without issue)
Microsoft Edge (Chromium): 79.0.309.0
msedgedriver for Microsoft Edge (Chromium): 79.0.309.0
->
(Works without issue)
Microsoft Edge (Chromium): 79.0.313.0
msedgedriver for Microsoft Edge (Chromium): 79.0.309.0
->
(Works without issue)
Microsoft Edge (Chromium): 80.0.315.0
msedgedriver for Microsoft Edge (Chromium): 79.0.309.0
->
(Works without issue)
PS: 我的 GetEdgeDriver.BAT 将当前安装的 Microsoft Edge (Chromium) Canary 浏览器的版本与当前从 https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/ 下载的 webdriver 进行比较。如果后者低于前者,它会下载 msedgedriver.exe 并覆盖旧的。
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
REM GNUWIN32 required
REM SET ONEDRIVE=%UserProfile%\OneDrive
REM This file is located in OneDrive\Files\BIN
SET ONEDRIVE=%~DP0..\..
SET EDGE_DIR=%UserProfile%\AppData\Local\Microsoft\Edge SxS\Application
IF NOT EXIST "%EDGE_DIR%\msedge.exe" ECHO MSEdge not found at %EDGE_DIR%! & GOTO :EOF
FOR /F %%I IN ('DIR /B "%EDGE_DIR%" ^| grep -E [0-9]+\.[0-9]+\.') DO SET MSEDGE_VERSION=%%I& GOTO :MSEDGE_VERSION_RETRIEVED
:MSEDGE_VERSION_RETRIEVED
ECHO MSEdge browser version: %MSEDGE_VERSION%
FOR /F %%I IN ('MSEDGEDRIVER -V ^| awk "{print }"') DO SET HAVE_DRIVER_VERSION=%%I& GOTO :HAVE_DRIVER_VERSION_RETRIEVED
:HAVE_DRIVER_VERSION_RETRIEVED
ECHO MSEdge driver version in OneDrive: %HAVE_DRIVER_VERSION%
REM e.g. https://msedgedriver.azureedge.net/79.0.287.0/edgedriver_win64.zip
IF %MSEDGE_VERSION% GTR %HAVE_DRIVER_VERSION% (
SET URL=https://msedgedriver.azureedge.net/%MSEDGE_VERSION%/edgedriver_win64.zip
ECHO.
ECHO Downloading !URL! -^> %TEMP%\edgedriver_win64_%MSEDGE_VERSION%.zip
REM -C -
REM continue previous download and skip if existing download
REM -k --insecure
curl -C - -s -L -k -o "%TEMP%\edgedriver_win64_%MSEDGE_VERSION%.zip" -g "!URL!"
REM curl -C - -s -L --insecure -o "%TEMP%\edgedriver_win64_%MSEDGE_VERSION%.zip" -g "!URL!"
REM unzip -uoqq "%TEMP%\edgedriver_win64_%MSEDGE_VERSION%.zip"
ECHO Extracting %TEMP%\edgedriver_win64_%MSEDGE_VERSION%.zip -^> %~DP0msedgedriver.exe
REM extract msedgedriver.exe inside edgedriver_win64_%MSEDGE_VERSION%.zip to %ONEDRIVE%\Files\BIN folder with the same name
REM 7z x -y -o"C:\Users\Administrator\OneDrive\Files\BIN" "%TEMP%\edgedriver_win64_%MSEDGE_VERSION%.zip" msedgedriver.exe > nul
7z x -y -o"%ONEDRIVE%\Files\BIN" "%TEMP%\edgedriver_win64_%MSEDGE_VERSION%.zip" msedgedriver.exe > nul
REM MSEDGEDRIVER -V
FOR /F %%I IN ('MSEDGEDRIVER -V ^| awk "{print }"') DO SET HAVE_DRIVER_VERSION=%%I& GOTO :NEW_DRIVER_VERSION_RETRIEVED
:NEW_DRIVER_VERSION_RETRIEVED
ECHO New MSEdge driver version in OneDrive: %HAVE_DRIVER_VERSION%
)
我试过下面的功能,效果不错,你可以试试:
{
"desiredCapabilities": {
"nativeEvents": false,
"browserName": "chrome",
"version": "",
"platform": "ANY",
"javascriptEnabled": true,
...
}
}
浏览器和 webdriver 必须匹配版本号的前 3 个元组。
在 chrome 中有一个版本检查会告诉您浏览器和网络驱动程序是否不匹配。 msedge 给出了更漫:No matching capabilities found
我正在使用安装 msedge 浏览器的巧克力 Microsoft Edge Insider - Beta
,它目前的版本是 79.0.309.65。
这意味着我无法使用目前为 79.0.313.0 的最新 79.x msededriver,我必须使用 79.0.309.x.
我在我的 selenium 驱动程序中实施了一个简单的测试,在开始之前检查这个。
终于解决了我的问题
- Install/Upgrade 硒 3.14 到 Selenium 4.0.0a5
- 将 Python 代码更改为如下所示:
# using edge directly, since you can see 'selenium.webdriver.chromium.webdriver' used in site-packages\selenium\webdriver\edge\webdriver.py
from selenium import webdriver
from selenium.webdriver.edge.options import Options
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.webdriver import WebDriver
...
...
driveroptions = Options()
# remember to set use_chromium
driveroptions.use_chromium = True
driveroptions.add_argument('--start-maximized')
driveroptions.binary_location = env_programfiles_x86 + "\Microsoft\Edge\Application\msedge.exe"
service = Service(executable_path="msedgedriver.exe")
driver = webdriver.Edge(options=driveroptions, service=service)
driver.set_page_load_timeout(40)
driver.get(page_url)