下载旧版本 EdgeDriver 的方法

访问 NuGet 官网 (https://www.nuget.org/) 并搜索 Microsoft.Edge.SeleniumTools.WebDriver,进入包详情页面后,点击 Versions 查看所有历史版本。

选择需要的版本号,点击 Download 按钮获取 .nupkg 文件。.nupkg 文件本质上是 ZIP 压缩包,可以修改文件后缀为 .zip 后解压。

解压后在 \tools 目录下找到 msedgedriver.exe 文件。根据操作系统版本选择 32 位或 64 位驱动,通常位于 \tools\x64 或 \tools\x86 子目录中。

使用 PowerShell 自动化下载

以下 PowerShell 脚本可以自动完成下载和解压过程:

$version = "96.0.1054.62"  # 替换为所需版本号
$url = "https://www.nuget.org/api/v2/package/Microsoft.Edge.SeleniumTools.WebDriver/$version"
$output = "$env:TEMP\edgedriver.nupkg"
$extractPath = "$env:TEMP\edgedriver"

Invoke-WebRequest -Uri $url -OutFile $output
Expand-Archive -Path $output -DestinationPath $extractPath
$driverPath = Get-ChildItem -Path $extractPath -Recurse -Filter "msedgedriver.exe" | Select-Object -First 1
Copy-Item -Path $driverPath.FullName -Destination "C:\WebDriver\"

版本兼容性参考

常见 Edge 浏览器版本与对应的 Driver 版本:

  • Edge 44 - 79: 使用 MSEdgeDriver 6.17134
  • Edge 80 - 85: 使用 MSEdgeDriver 80.0.361
  • Edge 86 - 93: 使用 MSEdgeDriver 86.0.622
  • Edge 94+: 需要使用兼容的 Selenium 4.0+

验证驱动可用性

解压后可以通过命令行验证驱动是否正常工作:

msedgedriver --version

建议将驱动放置在系统 PATH 环境变量包含的目录中,或直接在测试项目中指定驱动路径。

python批量下载代码:

import os
import requests
import zipfile
import io

def download_drivers_from_version_list():
    """
    通过一个预定义的 Python 列表来指定需要下载的版本号。
    脚本会遍历列表,从 NuGet 下载每个版本的 .nupkg 包,
    并从中提取 msedgedriver.exe 文件。
    """
    download_dir = "edgedriver_versions_from_nuget"
    package_id = "Selenium.WebDriver.MSEdgeDriver"

    # --- 步骤1: 在这个列表中直接添加或修改您需要下载的版本号 ---
    versions_to_download = [
        "98.0.1108.62",
        "98.0.1108.56",
        "92.0.902.73",
        "92.0.902.62",
        "92.0.902-pre",
        "91.0.864.37",
        "91.0.852-pre",
        "91.0.828-pre",
        "90.0.818.66",
        "83.0.478.58",
    ]
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
    }

    if not os.path.exists(download_dir):
        os.makedirs(download_dir)
        print(f"已创建目录: {download_dir}")

    print(f"计划下载 {len(versions_to_download)} 个版本: {versions_to_download}")

    # --- 步骤2: 遍历版本列表,下载、解压并提取 .exe 文件 ---
    for version in versions_to_download:
        new_filename = f"{version}_msedgedriver.exe"
        save_path = os.path.join(download_dir, new_filename)

        if os.path.exists(save_path):
            print(f"-- 版本 {version} 的驱动已存在,跳过。")
            continue

        # 构造 NuGet 包的直接下载 URL
        package_url = f"https://api.nuget.org/v3-flatcontainer/{package_id.lower()}/{version.lower()}/{package_id.lower()}.{version.lower()}.nupkg"
        
        print(f"-> 正在处理版本 {version}...")
        try:
            print(f"   下载 NuGet 包: {package_url}")
            response = requests.get(package_url, timeout=60, headers=headers)
            response.raise_for_status() # 如果状态码不是 2xx,则引发 HTTPError

            # 在内存中将下载内容作为 ZIP 文件打开
            with zipfile.ZipFile(io.BytesIO(response.content)) as zip_ref:
                driver_exe_path = None
                # 遍历包内所有文件,找到 msedgedriver.exe
                for file_in_zip in zip_ref.namelist():
                    if file_in_zip.lower().endswith('msedgedriver.exe'):
                        driver_exe_path = file_in_zip
                        break
                
                if driver_exe_path:
                    print(f"   在包内找到驱动: {driver_exe_path}")
                    # 提取 msedgedriver.exe 文件并保存
                    with zip_ref.open(driver_exe_path) as source, open(save_path, 'wb') as target:
                        target.write(source.read())
                    print(f"   提取成功 -> {new_filename}")
                else:
                    print(f"   !! 警告: 在版本 {version} 的包内未找到 msedgedriver.exe。")

        except requests.exceptions.HTTPError as e:
            if e.response.status_code == 404:
                print(f"   !! 错误: 版本 {version} 在 NuGet 上未找到 (404 Not Found)。")
            else:
                print(f"   !! HTTP 错误: {e}")
        except requests.exceptions.RequestException as e:
            print(f"   !! 网络请求错误: {e}")
        except Exception as e:
            print(f"   !! 处理版本 {version} 时发生未知错误: {e}")

    print("\n所有指定的 NuGet 包已处理完毕。")

if __name__ == "__main__":
    download_drivers_from_version_list()

更多推荐