
简介面向64位Windows平台上基于Selenium的Edge自动化测试场景这份EdgeDriver驱动提供了与Edge 92.0.902.67稳定版严格匹配的版本支持解决开发与测试工程师因浏览器版本和驱动不兼容而导致的脚本失败问题。压缩包共3个文件核心为可直接调用的驱动可执行文件另附HTML格式的说明文档和许可证文件其中说明文档通常涵盖更新日志、已知问题和配置指引。整个包仅6.99MB部署成本低按文档加入系统PATH或指定路径即可完成环境对接。已有827人浏览学习适合正在编写或调试Web自动化用例、需要稳定驱动桥接Selenium命令与Edge浏览器行为的中初级测试人员。借助这份资源可以快速搭建与浏览器版本匹配的测试环境减少排查驱动不兼容的时间更专注于功能测试与回归测试本身。1. EdgeDriver 92.0.902.67 的 win64 下载为什么这个版本值得你单独存一份某个周一早上项目组的自动化测试脚本突然集体报“SessionNotCreatedException”几乎每个人都以为是自动化框架升级造成的问题。排查下来才发现Edge浏览器在后台自动升级到了92而CI机器上的EdgeDriver还是91版本号一个数字之差整条自动化链路直接瘫痪。如果你能提前备好一个与浏览器完全对应的EdgeDriver 92.0.902.67的win64压缩包就能在五分钟内恢复。这个驱动文件是Edge浏览器和WebDriver自动化之间的桥梁没有它你在Windows 64位系统上写的所有脚本都指挥不动浏览器。对正在维护UI自动化、需要离线部署测试环境的开发者和爬虫工程师来说这是最不应该被忽略的基础资源。2. 下载前先搞清楚版本匹配Edge 92 为什么必须配 EdgeDriver 922.1 版本号不是越新越好而是越匹配越好EdgeDriver是浏览器厂商提供的WebDriver实现它通过DevTools协议与Edge通信。浏览器升级到一个新主版本后协议层面的命令和返回结构都可能变化因此驱动必须能“听懂”当前浏览器的协议语言。EdgeDriver的主版本号与Edge浏览器的主版本号保持一致比如92.0.902.67对应的就是Edge 92稳定版。如果你用91的驱动去启动92的浏览器驱动会直接抛出“only supports Edge version 91”之类的错误反过来用92的驱动启动91的浏览器也一样。小版本号最后一段通常可以容忍同主版本下的细微差异但保险起见我们仍然把驱动版本和浏览器版本锁到完全一致。常见做法是先在开发机上装一个固定版本的Edge关掉自动更新然后把对应版本的EdgeDriver放进共享存储避免每个人从网上下载到不同版本。这个思路和很多win64工具包的离线管理一样团队里会有人专门存一份与项目版本匹配的win64安装包不是为了追新而是为了环境可控。EdgeDriver同理版本匹配比版本更新重要。2.2 检查本机 Edge 版本界面查看和命令行查看首先用界面方式在Edge地址栏输入edge://version找到“版本”一行复制完整的版本号例如92.0.902.67 (正式版本) (64 位)。这个数字就是我们要匹配的目标。如果你有多台机器需要批量检查可以试试用PowerShell获取可执行文件的版本信息。前提是已经把Edge的路径加入PATH或者在当前目录下能找到msedge.exe。命令如下(Get-Command msedge.exe -ErrorAction SilentlyContinue).Source | ForEach-Object { (Get-Item $_).VersionInfo.FileVersion }命令先说逻辑第一段用Get-Command找到msedge.exe的路径如果没有则静默跳过第二段对找到的路径调用Get-Item拿到文件对象再读取VersionInfo.FileVersion。直接在PowerShell里执行输出像92.0.902.67这样的版本号。注意如果命令没有输出说明msedge.exe没有加入PATH。这时请不要强行改动系统PATH直接回到edge://version查看即可。我们在Windows上做自动化无非是想少点人工步骤但检查版本本身只需要五秒钟没必要写复杂脚本。2.3 官方下载页里怎么判断你选的是不是 win64打开EdgeDriver下载页面后你会看到一列平台选项。这里最常踩的坑就是选择平台时只看“x64”字样却忽略系统版本和架构。严格来说我们本文提到的win64指的是Windows 64位操作系统下载文件通常是edgedriver_win64.zip解压后是一个可直接执行的msedgedriver.exe。如果你的操作系统是32位就得选win32如果是Windows下跑在ARM64虚拟机里又要另选arm64。不要因为看到“x64”就以为Windows一定支持要看文件名的平台后缀。下载时还要确认版本号下拉框里确实有92.0.902.67。某些网站可能会把“最新稳定版”放在第一个但你的浏览器是92就必须滚动到92而不是选93或94。切到92.0.902.67选择win64下载得到的zip文件里只有一个exe没有其他依赖库也不需要安装。这就是我们需要的资源。2.4 下载后先校验哈希防止拿到损坏或篡改的驱动从任何渠道下载的win64包都必须和官方页面上给出的SHA256做一次比对。这个步骤很多人会跳过直到驱动怎么也跑不起来才回头查。用PowerShell完成校验很简单Get-FileHash .\edgedriver_win64.zip -Algorithm SHA256-Algorithm SHA256指定计算方式输出一个长字符串。把它和官方下载页列出的SHA256逐字符比对。不一致的话宁可重新下载也不要解压使用。我在一次部署中就遇到过从不明分享站下载的压缩包解压后exe被安全软件拦下查了哈希才发现和官方不符里面夹带了不该有的额外文件。从那以后凡是从网上下载win64工具包不管是EdgeDriver还是其他win64压缩包我都先算一遍哈希。这也是为什么在团队内部我更倾向于把校验过的zip文件放到内网共享盘而不是让每个人各自下载。3. 把驱动部署到 Windows 环境手动解压、环境变量与脚本自动化3.1 手动解压到固定目录C:\WebDriver 的约定不少测试机的环境变量被越加越乱所以我在新环境里会给EdgeDriver单独建一个目录比如C:\WebDriver避免和一堆系统工具混在一起。下载得到edgedriver_win64.zip后打开PowerShell依次执行mkdir C:\WebDriver -Force Expand-Archive -Path $env:USERPROFILE\Downloads\edgedriver_win64.zip -DestinationPath C:\WebDriver -Force第一行-Force表示目录已存在时不报错第二行把zip解压到C:\WebDriver-DestinationPath后面跟目标目录-Force覆盖任何同名文件。解压后确认C:\WebDriver\msedgedriver.exe存在。这里有个习惯我不推荐把驱动直接解压到项目目录因为项目与浏览器版本绑定一旦项目被拷贝到别的机器驱动版本很可能被一起带上反而造成混乱。统一放到固定目录配合环境变量才是Windows下最省心的做法。3.2 把驱动目录加入用户 PATH 并验证为了让任何终端都直接能调用msedgedriver.exe需要把C:\WebDriver加入用户环境变量Path。可以用PowerShell的[Environment]::SetEnvironmentVariable来写注意要拼接到现有Path而不是替换$old [Environment]::GetEnvironmentVariable(Path, User) [Environment]::SetEnvironmentVariable(Path, $old ;C:\WebDriver, User)第一行读出当前用户Path第二行在末尾追加;C:\WebDriver第三个参数User表示持久化到用户级环境变量覆盖当前进程的话用Process。改完环境变量后需要重新打开一个终端再执行msedgedriver.exe --version如果能输出92.0.902.67类似的版本信息说明部署成功。如果提示命令不认识多半是当前PowerShell窗口没有继承最新的Path关掉重开即可。注意环境变量拼接每次执行都会追加一份重复项建议在脚本里先判断是否已存在if ($old -notlike *C:\WebDriver*) { [Environment]::SetEnvironmentVariable(Path, $old ;C:\WebDriver, User) }这样一来重复运行脚本也不会污染Path。3.3 用脚本自动下载、解压并注册如果你需要在几十台机器上快速部署我一般会把下载和解压写成一段独立的PowerShell脚本参数化版本号和架构放到CI流水线里跑。脚本核心部分如下param( [string]$Version 92.0.902.67, [string]$Arch win64, [string]$Destination C:\WebDriver ) $url https://example.com/edgedriver_${Version}_${Arch}.zip $zip Join-Path $env:TEMP edgedriver_$Version.zip Invoke-WebRequest -Uri $url -OutFile $zip Expand-Archive -Path $zip -DestinationPath $Destination -Force $exe Join-Path $Destination msedgedriver.exe $exe --version这段脚本先从参数里拿到版本号和架构拼出下载URLInvoke-WebRequest负责下载到临时目录Expand-Archive解压到目标目录最后调用--version做验证。$url里的example.com是占位符实际使用时要替换成官方下载页给你的真实直链直链在官方页面上“复制链接地址”即可。脚本里值得注意的两个点一是URL模板中的${Version}语法是为了清楚分隔变量名防止和下划线混淆二是每一步最好都加上-ErrorAction Stop让下载失败时直接中断。部署完成后记得在流水线下一步执行环境变量写入否则后续步骤仍然找不到命令。3.4 部署到项目目录还是系统 PATH有人喜欢把驱动直接放在项目目录然后代码里写相对路径也有人依赖PATH。我的建议是二选一不要两边都放。如果你只有一个项目在用EdgeDriver放在项目目录最直观代码里用绝对路径引用如果你有多个项目或者有跨项目的公共测试库放PATH会更方便。但放PATH有一个副作用不同项目可能依赖不同EdgeDriver版本而PATH里的版本只有一个。遇到这种情况我会放弃PATH在代码里用Service显式指定驱动路径这样每个项目都有自己的驱动版本。后面第四章会看到一个具体例子。4. 在自动化脚本中启动 EdgeDriverPython 代码、参数和验证输出4.1 选择 WebDriver 实现库并确认安装早期的WebDriver绑定库对Chromium内核Edge的支持不算稳定经常需要额外的desired capabilities配置。升级到当前主流版本会少很多折腾。在虚拟环境里执行pip install selenium -U-U会把selenium升级到当前可用的最新版本。装完后用pip show selenium看一下版本理论上4.x都行。如果你担心升级后老代码API变化可以先在另一个虚拟环境里测试不要直接在测试机上覆盖。4.2 用 Service 和 Options 显式初始化浏览器推荐用Service传入驱动路径然后传给webdriver.Edge这样的好处是代码里写清楚驱动到底在哪不依赖系统PATH避免环境变量混乱。示例代码如下from selenium import webdriver from selenium.webdriver.edge.service import Service from selenium.webdriver.edge.options import Options options Options() # 指定Edge可执行文件位置如果找不到会使用默认路径 options.binary_location rC:\Program Files (x86)\Edge\Application\msedge.exe # 按实际安装位置调整 service Service(rC:\WebDriver\msedgedriver.exe) driver webdriver.Edge(serviceservice, optionsoptions) driver.get(https://example.com) print(driver.title) driver.quit()代码先创建Options对象binary_location用来告诉驱动Edge浏览器在哪里防止驱动运行后找不到浏览器。如果你确定Edge安装在默认位置这行可以省略。然后创建Service参数是msedgedriver.exe的绝对路径。webdriver.Edge接收service和options启动浏览器并打开example.com。最后driver.quit()关闭浏览器释放端口资源。注意在新版本中executable_path这个参数已被逐步废弃尽量使用Service。网上很多老教程还在用executable_pathrC:\WebDriver\msedgedriver.exe新版本会打出警告后续某个版本甚至直接移除。4.3 常用启动参数headless 和 no-sandbox在服务器或CI环境里通常没有桌面交互需要无头模式启动。向options里追加参数options.add_argument(--headless) options.add_argument(--no-sandbox) options.add_argument(--disable-gpu)第一行启用无头第二行禁用操作系统的沙盒这在Windows容器和受限服务账户下很有用第三行禁用GPU加速避免在无显卡的机器上报OpenGL错误。这几个参数不是每次都必须但遇到启动后立刻退出、或者抛出“DevToolsActivePort”错误时优先加--no-sandbox和--disable-gpu作为排查手段。这些参数的原理是直接透传给Chromium内核的命令行开关EdgeDriver在启动浏览器时会附加上去。如果你遇到很奇怪的白屏问题可以尝试删掉--headless在真实桌面上跑一遍很多看起来是驱动问题的情况其实是无头模式下的渲染兼容问题。4.4 验证驱动是否被正确加载从 capabilities 读回版本启动后可以从driver的capabilities里读到当前实际生效的浏览器版本和驱动版本caps driver.capabilities print(caps.get(browserVersion)) print(caps.get(msedgeDriverVersion))browserVersion返回的是Edge浏览器真实版本msedgeDriverVersion返回的是当前加载的EdgeDriver版本。如果这两个数字和你在下载时记录的版本不一致回去检查Service路径或者环境变量。每次启动都打印一遍可能有点啰嗦但至少第一次初始化时值得这么做。我习惯写一个最简单的断言工具在启动后立即比对expected_browser 92.0.902.67 actual_browser caps.get(browserVersion) assert actual_browser.startswith(expected_browser.split(.)[0]), 浏览器主版本不对这里只比对主版本92原因是不同小版本在自动化场景下通常不会产生阻塞性错误但如果你确实想逐一验证直接把expected_browser改成完整版本号就好了。5. 常见问题与避坑五条高频踩坑记录和解决步骤下面这五条是我在实际部署中遇到最多的第5.1到5.4几乎是新环境必踩第5.5则多发生在长时间运行的测试机上。排查时建议按“找到驱动→验证版本→查看端口→确认安全软件”的顺序走不要一上来就重装。5.1 SessionNotCreatedException版本号里哪怕一个数字不对也启动不了现象运行脚本时抛出selenium.common.exceptions.SessionNotCreatedException错误信息里写着类似“This version of MSEdgeDriver only supports Edge version 91”。原因EdgeDriver版本和Edge浏览器版本不匹配。浏览器自动更新了驱动还留在旧版本或者你从网上下载了另一小版本的驱动。解决去edge://version查看浏览器精确版本然后下载同版本号的EdgeDriver win64包。如果你不想改浏览器可以把Edge的自动更新策略关掉强制锁定在92.0.902.67这样驱动版本就不需要频繁跟着升级。关更新可以在组策略里设置但需要注意团队机器都执行同样的策略否则下个月又会跳一个新版本出来。5.2 FileNotFoundError驱动文件明明存在脚本就是找不到现象启动代码时抛出FileNotFoundError: [Errno 2] No such file or directory: msedgedriver.exe但你在资源管理器里确实看到了这个文件。原因路径写错或者依赖默认PATH。代码里如果直接写Service(msedgedriver.exe)系统只会在PATH里找而你的终端可能没有刷新环境变量或者传入的是相对路径工作目录不在驱动所在目录。解决在代码里写绝对路径比如Service(rC:\WebDriver\msedgedriver.exe)。如果你担心本机路径和项目路径不一致就把路径放到配置文件里运行时读取。另一个隐蔽细节是路径末尾不要带多余的空格或反斜杠Windows路径常用反斜杠在Python字符串里要用原始字符串r...或者把路径里的\改成/。5.3 驱动启动后立即退出没有异常信息现象代码运行后浏览器窗口弹出一下立刻关闭控制台没有Traceback也没有输出。原因两个常见来源。一是Edge浏览器不在默认安装路径驱动通过标准路径找不到msedge.exe二是某些沙盒或权限问题限制了浏览器启动。解决先在Options里指定binary_location指向真实的Edge安装路径。如果不知道路径在Windows搜索框输入“Edge”右键查看文件位置。第二个解决办法是在options里加--no-sandbox和--disable-gpu再跑一次。我遇到过一批Windows服务器测试机默认安全策略比较严格必须加--no-sandbox才能用无头模式跑。5.4 安全软件把 msedgedriver.exe 当作病毒处理现象过一段时间后C:\WebDriver下的exe文件默默消失或者安全软件弹窗提示检测到“威胁”。原因某些安全软件对网络下载的exe极其敏感尤其是新下载未签名或签名较少的驱动。EdgeDriver虽然来自官方但很多安全软件默认规则会把“webdriver”这类自动化工具判定为风险。解决恢复文件并加入白名单确认白名单目录是C:\WebDriver。更可靠的做法是每一次部署都校验哈希防止从非官方渠道下到被篡改的驱动。有一种情况是驱动文件本身没被删但被安全软件隔离了终端执行时依然找不到。这时需要去安全软件的隔离区手动恢复。为了避免中途消失我还习惯在启动脚本里加一个检查如果msedgedriver.exe存在但大小异常先重新解压一次。5.5 端口 9515 被占用或连接拒绝现象启动第二个浏览器实例时报错或者driver.get()一直卡住最后连接被拒绝。原因EdgeDriver默认监听9515端口当你连续启动多个驱动实例并异常退出时上一个进程没有释放端口。也可能是其他自动化框架占用了9515。解决在任务管理器里找到msedgedriver.exe进程并结束或者用命令行强制清理Get-Process -Name msedgedriver -ErrorAction SilentlyContinue | Stop-Process -Force这条命令会杀掉所有msedgedriver进程-Force强制结束。你也可以在Service创建时给每个实例指定不同端口例如service Service(rC:\WebDriver\msedgedriver.exe, port9515)但单机并行跑测试时更好是使用独立进程配合不同端口避免互相干扰。注意若你的项目用了反向代理或防火墙还需要确认9515端口不被外层安全组拦截。6. 进阶技巧给驱动上一道版本锁远比你想象的更重要6.1 用 HTTP 状态接口确认驱动存活EdgeDriver在启动后会在本地端口上运行一个WebDriver服务你可以直接用浏览器或curl访问http://localhost:9515/status来查看它的健康情况。假设驱动已部署并启动使用PowerShellInvoke-RestMethod -Uri http://localhost:9515/status | ConvertTo-Json -Depth 3返回的JSON里会包含build、os等字段其中build下的version就是当前驱动版本。这个接口不依赖任何代码非常适合在启动驱动后做一次外部验证确认不是脚本代码本身的问题。如果访问拒绝则回到第5.5节检查端口。6.2 把 EdgeDriver 版本写进配置文件很多自动化项目喜欢在依赖文件里只盯库版本却不管驱动版本。这会导致今天能跑、明天浏览器一升级就挂。我一般的做法是在项目根目录放一个config.ini[driver] browser_version 92.0.902.67 driver_version 92.0.902.67 arch win64 driver_path C:\WebDriver\msedgedriver.exe然后在启动模块里读取这些值启动时和实际capabilities比对。如果对不上直接抛出异常附上“请检查浏览器升级或驱动版本”的提示。这样团队里其他人拿到项目不用去搜索引擎临时查版本关系代码会告诉他该去哪一步。6.3 实战把下载、解压、校验组装成一条完整链路把前面的PowerShell脚本和Python验证结合形成一条部署流水线先用脚本从官方页面拉取指定版本win64包算哈希再解压生成配置文件最后Python启动时读取配置文件并断言caps。整个过程不需要人肉记录版本环境第一次搭建时跑一次部署脚本后续每次升级只改配置文件里的两个版本号。这个链路解决的最大痛点是“驱动版本漂移”。测试环境一旦出现那类版本问题大家通常第一反应是重装驱动但往往忘了到底是哪个版本能跑。我从那以后每次在新机器上装驱动的第一件事就是把版本号写进项目配置而不是只依赖PATH里那个孤零零的exe。希望帮到你。本文还有配套的精品资源点击获取