MSEdgeDriver(Chromium)不适用于版本> = 79.0.313(Canary) [英] MSEdgeDriver (Chromium) does not work with version >= 79.0.313 (Canary)

查看:334
本文介绍了MSEdgeDriver(Chromium)不适用于版本> = 79.0.313(Canary)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在脚本中使用了Microsoft Edge Webdriver(Chromium)和Python3.

I'm using Microsoft Edge Webdriver (Chromium) with Python3 in my script.

webdriver配置如下:

The webdriver configuration is as follows:

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开始,驱动程序简单地返回错误:

It works well previously, but starting with 79.0.313.0, the driver simply returns the error:

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

如果msedgedriver版本保持在79.0.309.0,我仍然可以使用我的脚本.

I can still use my script if the msedgedriver version is kept at 79.0.309.0.

但是新版本的msedgedriver(79.0.313.0、80.0.315.0等)发生了什么?

But what happened to the newer versions of msedgedriver (79.0.313.0, 80.0.315.0 etc.)?

他们是否放弃了一些受支持的功能?

Are they dropping some supported capabilities?

已更新:

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(及更低版本)的msedgedriver:

and with 79.0.309.0 (and older) msedgedriver:

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/zh-cn/microsoft-edge/tools/webdriver/.如果后者低于前者,则会下载msedgedriver.exe并覆盖旧的.

PS: My GetEdgeDriver.BAT which compares the version of currently installed Microsoft Edge (Chromium) Canary browser with currently downloaded webdriver from https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/. If the latter is lower than the former, it downloads the msedgedriver.exe and overwrites the old one.

@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 $2}"') 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 $2}"') 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%
)

推荐答案

最终解决了我的问题.

  1. 将Selenium 3.14安装/升级到 Selenium 4.0.0a5
  2. 将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)

这篇关于MSEdgeDriver(Chromium)不适用于版本> = 79.0.313(Canary)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆