简介:面向Windows 64位的EdgeDriver 92.0.902.67自动化测试驱动,专供需要借助Selenium操控Microsoft Edge的开发与测试人员使用。驱动与Edge浏览器版本需对应,能完成页面跳转、元素点击、表单填写等操作,是功能与回归测试的关键桥梁。压缩包共3个文件、约6.99MB,包含可执行驱动、HTML说明文档与开源许可文件,结构清晰,配置PATH或指定路径即可调用。目前已有827人学习下载。说明文档涵盖更新日志、已知问题、解决方案与注意事项,可帮助避开版本不匹配、环境变量错误等常见坑;兼容性配置指引也让入门者更快上手。整体而言,该资源解决了驱动来源分散、匹配关系不清的痛点,是可即刻使用的自动化测试基础组件。
1. EdgeDriver 92.0.902.67 的 win64 包:为什么你的自动化卡在这一步
EdgeDriver 92.0.902.67 的 win64 包,是很多做 UI 自动化的人绕不过去的一道坎。浏览器一旦自动更新,手头驱动对不上,Selenium 脚本就像集体罢工,报错里反反复复蹦出版本不匹配。这个版本号对应 Edge 92 主版本线的 Windows 64 位驱动,解决的是一件事:让测试代码能通过 WebDriver 协议指挥本机 Edge 浏览器干活。适合正在跑脚本的新手,也适合帮团队固定版本、避免环境悄悄漂移的老手。下载本身不难,难的是版本对齐、位数选择和环境落位,下面按我的习惯一步步拆开。
2. 版本匹配与位数选择:下载前先想清楚的两件事
下载之前,先花两分钟想清楚两个问题:版本号到底怎么对齐,win64 到底是不是你要的那个包。这两件事想反了,后面全是玄学式的报错。很多人直接搜“EdgeDriver 下载”拿到最新版,一运行就发现浏览器根本不认,然后又去翻旧版本,来回折腾一个下午。
我一般把这两件事当作下载前的固定检查项:第一,查浏览器实际版本号,和你要下载的驱动版本对不对得上;第二,确认跑脚本的解释器是 64 位还是 32 位。这两点确认完,再动手下载,基本不会出现“下载完白干”的情况。
2.1 主版本号必须对齐,92.0.902.67 是个什么位置
EdgeDriver 的版本线和浏览器版本线是一一对应的。92.0.902.67 这个版本号,说明它是和 Edge 浏览器 92.0.902.67 一起发布的那一版驱动。主版本号 92 是关键,浏览器主版本是 92,驱动主版本也必须是 92。跨主版本基本是硬性拒绝,报错会直接告诉你版本不匹配。
这里有个很容易踩的认知误差:以为驱动小版本和浏览器小版本差一点没关系。在 EdgeDriver 上,小版本略有出入偶尔能跑,但千万别赌。尤其是团队多人联调、CI 节点批量跑的时候,一台机器能跑、另一台报错,最后查下来就是驱动小版本和浏览器小版本对不上。我见过最折腾的一次,是某台测试机上浏览器自动更新到了同一主版本段里的另一个小版本,驱动还是旧的小版本,时好时坏,排查了很久才发现是版本漂移。
为什么这个版本号值得专门下载?因为 Edge 浏览器默认会静默自动更新。你上周装的 92,这周可能已经变成 94 甚至更高。一旦浏览器升上去,旧驱动立刻失效,脚本全部报错。所以“EdgeDriver92.0.902.67 的 win64 下载”这个需求,本质上是在对抗环境漂移——你想把环境和驱动都钉在某个确定版本上。
| 驱动版本 | 浏览器主版本 | 是否推荐 |
|---|---|---|
| 92.0.902.67 | 92.x | 推荐,小版本尽量一致 |
| 92.0.902.67 | 93.x | 不推荐,大概率拒绝启动 |
| 94.x | 92.x | 不推荐,协议可能不兼容 |
查浏览器版本号最省事的办法,是直接在地址栏输入edge://version,页面里会列出完整版本号,能看到 92.0.902.67 这种带着四段数字的字符串。也可以用命令行工具读安装目录下的 msedge.exe 文件版本,但地址栏这个方式对新手最友好,所见即所得。
2.2 win64 不是越大越好:进程、系统与浏览器的三角关系
很多人看到“win64”就默认是给 64 位 Windows 用的,这个理解只说对了一半。驱动是一个独立的 exe 进程,它由谁拉起、以什么位数运行,取决于调用它的测试进程,而不是操作系统位数。也就是说,如果你的 Python 或 Java 进程是 32 位的,即便系统是 64 位,也未必能正常拉起一个 64 位的驱动。
这个坑在本地开发机上不太常见,因为大家普遍装的是 64 位 Python。但 CI 机器、老同事共享的测试机、预装 32 位 JDK 的镜像,这些场景里就很容易翻车。表现是驱动下载了、路径也写对了,但启动瞬间进程闪退,或者 Selenium 长时间无响应,查日志也没有明确的错误信息。
判断方法很简单:在 Python 里跑一行python -c "import platform; print(platform.architecture())",看输出是('64bit', ...)还是('32bit', ...)。Java 的话可以看 JRE 安装目录下的java -version输出里是 64-Bit 还是 32-Bit。这个信息决定了你要找的是 win64 包,还是 32 位驱动包。
| 运行环境 | 推荐驱动包 |
|---|---|
| 64 位 Windows + 64 位 Python/JDK | 本标题对应的 win64 包 |
| 64 位 Windows + 32 位 Python/JDK | 32 位驱动包 |
| 32 位 Windows | 32 位驱动包 |
还有一点容易被忽略:Edge 浏览器本身是 64 位还是 32 位也会影响表现。正常 64 位系统会装 64 位浏览器,但有些系统为了兼容老插件装了 32 位浏览器。如果驱动和浏览器位数不一致,表现往往是驱动能启动,但浏览器被拉起后异常退出,或者根本找不到浏览器实例。所以下载前查一下浏览器安装目录里有没有x86字样,也是个保险动作。
3. 下载、校验与落位:拿到 EdgeDriver win64 的最小动作
把版本和位数确认好之后,剩下的就是下载、校验、解压、配置路径这四个动作。这个流程看起来简单,但每一步都有对应的坑。我见过太多人卡在“下载之后不知道放哪”“放了不知道对不对”“对了也不知道怎么验证”这几个环节。这一章把每一步的原因和判断标准写清楚,你照着走一遍,后面就顺了。
3.1 下载前先查浏览器实际版本号(避免下载完白干)
我说的“先查版本”,不是让你看一眼浏览器“关于”页面就完事,而是要用能拿到完整四段版本号的方式去确认。因为 Edge 的自动更新策略在不同环境里不一样,有的公司通过组策略锁定了更新,有的机器可能已经悄悄升到了别的版本。你以为你面对的是 92,实际可能早就不是了。
最稳定的做法是打开 Edge 浏览器,地址栏输入edge://version,然后回车。页面顶部第一行就是完整版本号,形如 92.0.902.67。确认主版本段是 92,再去下载对应的驱动。如果查出来已经是 93 或者更高,那你需要找的就不是这个标题里的版本了,而是对应新版浏览器的驱动。
命令行老手也可以用 PowerShell 读取文件版本:
# 把路径替换成你机器上 Edge 的实际安装路径 $edgePath = "你的Edge安装路径\msedge.exe" (Get-Item $edgePath).VersionInfo.FileVersion这条命令的作用是直接读出 msedge.exe 内置的版本信息,输出格式和浏览器地址栏里的一致,方便在脚本里做自动化判断。但要注意,这条命令要求路径指向真实的 Edge 可执行文件,如果安装路径不对或权限不足,会提示找不到文件。
查完版本之后,去驱动分发页找对应版本号目录。文件名里一般会带win64字样,比如edgedriver_win64.zip这类。不要只看版本号不看位数,更不要顺手点“最新版本”的按钮——你现在要的是固定版本,最新版可能已经和 92 无关了。
3.2 解压后先做哈希校验,再决定要不要信
下载动作本身没什么可说的,关键在于下载完到解压之间,缺了一个很多人都会跳过的步骤:校验文件完整性。驱动是一个可执行程序,网络传输过程中可能损坏,镜像站也可能串包。不做校验,解压完一运行就报错,你还以为是驱动和浏览器不匹配,实际是文件本身是坏的。
官方分发页通常会提供 SHA256 哈希值。下载完的 zip 文件,先在你本地算一遍哈希,和发布页给的比对,一致才继续。PowerShell 下的写法:
# 计算下载文件的 SHA256 值,用于和发布页给出的值比对 Get-FileHash .\edgedriver-win64.zip -Algorithm SHA256输出会有一长串十六进制字符串。把这串字符串和发布页上公布的 SHA256 值逐位比对,确认完全一致,说明下载的文件没有问题。如果使用的是公司内部镜像,镜像页面给的可能是 MD5,也可以用Get-FileHash -Algorithm MD5来算。但说实话,能比 SHA256 就比 SHA256,稳妥得多。
有人觉得这一步多余,“我下载的还能有假?”但实际教训是:非官方镜像站点偶尔会放错文件,尤其是老版本驱动,很多镜像站已经不再维护,点进去下载下来的是同名但损坏的压缩包。我以前帮同事排查过一次,折腾了两小时,最后发现是下载站串了包,文件体积都不对。从那以后,我下载任何驱动类可执行文件,都会先做哈希校验再解压。
3.3 把 msedgedriver.exe 放进 PATH 的正确姿势
校验通过后,解压得到的是msedgedriver.exe。这个文件放在哪里,直接影响后续代码怎么写。我一般会专门建一个目录,比如D:\tools\edgedriver,不和测试项目代码混在一起,也不放进系统目录。原因很简单:不同项目可能依赖不同版本的驱动,混在一起容易互相覆盖,出问题时难以复盘。
解压的命令在 PowerShell 下有两种写法:
# 方法一:使用 Expand-Archive 解压到指定目录 Expand-Archive -Path .\edgedriver-win64.zip -DestinationPath D:\tools\edgedriver # 方法二:使用 tar(新版 Windows 10/11 自带) tar -xf edgedriver-win64.zip -C D:\tools\edgedriver展开之后的目录里就是msedgedriver.exe。接下来考虑要不要把它加进 PATH。加 PATH 的好处是 Selenium 可以在找不到显式路径时自动去系统 PATH 里找;坏处是如果你机器上有多个版本的驱动,PATH 里的那个可能不是你当前项目需要的那个。
我的习惯是用显式路径,不依赖 PATH。代码里直接把msedgedriver.exe的完整路径传给 Service 对象,这样每个项目都清清楚楚知道自己用的是哪个驱动。如果你还是想放进 PATH,有一种相对安全的做法:
# 把解压目录追加到当前用户的 PATH(注意这里只是示例命令) setx PATH "%PATH%;D:\tools\edgedriver"注意setx有个坑:它会把当前 PATH 的值展开后写入用户变量,如果你之前 PATH 里有系统变量引用,展开后可能把系统 PATH 里的变量字符串展开成了具体路径,造成 PATH 重复增长甚至截断。这个操作要谨慎,能不碰就别碰。用显式路径写在代码里,反而是最不容易出错的做法。
4. 用最小脚本验证驱动真的能用
驱动下载好、路径配置好,接下来要做的不是马上跑你那个大型测试框架,而是在一个干净的环境里用最小脚本验证驱动能不能正常启动浏览器。这一步的意义在于把变量降到最少:如果最小脚本都过不了,那就是驱动或环境的问题,而不是你的业务代码的问题。如果最小脚本能过,再去集成大框架,心理就有底了。
4.1 Python 端 5 行代码跑通启动
我用 Python 举例,因为这是 Selenium 用户群里最常见的语言。先写一个最简单的脚本,只做四件事:创建 Service、启动驱动、打开一个页面、退出。
from selenium import webdriver from selenium.webdriver.edge.service import Service # 显式指定驱动路径,避免依赖 PATH 里的多版本冲突 service = Service(r"D:\tools\edgedriver\msedgedriver.exe") driver = webdriver.Edge(service=service) driver.get("http://example.com") print(driver.title) # 能打印出页面标题,说明整条链路是通的 driver.quit()这段代码看起来短,但逻辑上是完整的。Service对象负责管理驱动的生命周期,把可执行文件的路径传给它之后,webdriver.Edge(service=service)会拉起驱动进程,驱动再去启动 Edge 浏览器。quit()一定要调用,不调用的话后台会残留 msedgedriver 和 Edge 进程,跑几次之后机器上全是僵尸进程,后面再启动就容易异常。
如果你用的是老版本的 Selenium,可能会见到webdriver.Edge(executable_path=r"...\msedgedriver.exe")这种写法。这个参数在新版本里已经废弃了,现在统一用 Service 传路径。如果照抄老代码,大概率会收到一个 DeprecationWarning,虽然暂时还能跑,但早晚要改过来。
跑完这个脚本,如果你能看到终端打印出页面标题,退出也没有报错,说明驱动下载、路径配置、版本匹配这三个环节全部通过。到这里,标题里那个“下载”需求才算真正落地。
4.2 启动失败时先看这三行日志
最小脚本跑不通,报错信息五花八门,但绝大多数都集中在这三种情况。每当你遇到报错,先把错误信息复制下来,对照下面这三条排查思路走,比瞎试快得多。
第一种报错是“Driver executable does not exist”或者“cannot find the driver executable”。这说明 Selenium 没有在你指定的路径找到msedgedriver.exe。原因通常是路径写错、盘符打错、或者相对路径的工作目录不是你以为的那个目录。解决方法是把路径改成绝对路径,打印出来确认。
第二种报错是“SessionNotCreatedException”,错误信息里带版本号,基本就是驱动和浏览器版本不匹配。要么是你下载的驱动不是 92.0.902.67 对应的版本,要么是浏览器已经自动更新走了。回到第二章的办法,重新查浏览器实际版本号,重新对齐。
第三种报错是启动进程失败,有时输出 “Failed to start browser process”,有时干脆没有任何输出就挂掉了。这种情况优先检查杀毒软件是否把驱动隔离了,以及是不是 32 位进程调用了 64 位驱动的问题。这两类坑会在下一章的避坑清单里展开讲。
4.3 参数与选项:日志级别、端口、无头模式的设置
最小脚本跑通之后,开始往真实场景靠拢。真实场景通常不是启动一个可见的浏览器窗口,而是在服务器或 CI 环境里跑,这时需要无头模式和一些稳定性参数。Edge 驱动的参数设置和 ChromeDriver 类似,但有一些细节值得单独说。
常见的一个需求是开启无头模式。新版本 Edge 推荐用--headless=new,旧的--headless在某些版本上会出现兼容问题。另一个常用参数是--disable-gpu,在虚拟机和远程桌面场景下,GPU 相关的 bug 很常见,先禁用能省去很多麻烦。
from selenium import webdriver from selenium.webdriver.edge.options import Options from selenium.webdriver.edge.service import Service options = Options() options.add_argument("--headless=new") options.add_argument("--disable-gpu") # 指定驱动日志文件,方便排查启动阶段的问题 service = Service( r"D:\tools\edgedriver\msedgedriver.exe", log_output=r"D:\tools\edgedriver\driver.log", ) driver = webdriver.Edge(service=service, options=options) driver.get("http://example.com") print(driver.title) driver.quit()参数说明:--headless=new是 Edge 新版无头模式的标准写法,比旧模式稳定,页面渲染行为更像有头模式;--disable-gpu避免 GPU 进程导致的黑屏和闪退;log_output把驱动自身的日志写到文件,一旦出错可以直接翻驱动日志,而不用只盯着 Selenium 抛出的异常。
还有一个容易被忽略的参数是端口。Selenium 默认让驱动自己选一个空闲端口,但有些测试环境网络策略会限制本地端口范围,导致驱动启动失败。遇到这种情况,可以在 Options 里设置add_argument("--remote-debugging-port=9222")固定一个调试端口,不过这个参数更多是配合手动调试用的,日常跑脚本不建议固定,免得端口冲突。
5. EdgeDriver win64 落地避坑:五条真实踩坑记录
前面几章讲的是正常路径,这一章专门讲不正常路径。下面这五条是我在帮别人排查环境问题时最常遇到的坑,每条都有明确的现象、原因和解决办法。你可以把这部分当成一个排查手册,遇到对应症状直接查对应的条目。
5.1 浏览器版本号看起来一样,启动仍报版本不匹配
现象:浏览器地址栏显示 92.0.902.67,下载的驱动也是 92.0.902.67,版本号看起来完全一致,但启动时报 SessionNotCreatedException,提示当前驱动支持的版本范围不包含你的浏览器版本。
原因:最有可能是浏览器频道不一致。Edge 正式版、Beta、Dev 三个频道的版本号体系略有差异,地址栏看到的完整版本号可能不是驱动匹配的那个产品版本。另外,如果浏览器安装的是企业版或者镜像精简版,注册表里的版本信息和实际 exe 的文件版本也可能不一致。
解决:别只看地址栏版本号,去安装目录右键 msedge.exe 看文件属性里的详细信息,拿到真实的文件版本。同时确认你下载驱动时选择的频道是 Stable(正式版)而不是 Beta。对绝大多数团队来说,驱动和浏览器都固定在正式版频道,是最省心的组合。
5.2 驱动路径明明存在,却提示 executable does not exist
现象:你在代码里写的就是D:\tools\edgedriver\msedgedriver.exe,确认文件存在,但 Selenium 报 “Driver executable does not exist”。
原因:最常见的是路径字符串里的转义问题。在 Python 里写反斜杠路径时,如果没写原始字符串,\t会被解析成制表符,路径自然就错了。其次是用相对路径,但实际工作目录不是项目根目录,导致路径解析失败。
解决:路径一律用原始字符串写法,也就是在路径前面加r,写成r"D:\tools\edgedriver\msedgedriver.exe"。同时建议在脚本里加一句打印,确认你传给 Service 的路径和实际文件路径一致。这类问题排查起来很容易,但一旦不仔细看,能白白耗掉你半小时。
5.3 win64 驱动撞上 32 位进程的坑
现象:下载的是 win64 驱动,在本地开发机上能跑,放到某台 CI 机器上就启动失败,有时报错有时不报错,表现很随机。
原因:CI 机器上的 Python 或 Java 是 32 位版本。驱动本身是 64 位原生程序,32 位进程在 Windows 上不能直接用某些方式拉起它。这个坑的隐蔽之处在于:驱动主页面上不会写“请确认你的调用方位数”,下载页面只会标 win64,让大家下意识以为只要系统是 64 位就行。
解决:在那台机器上执行python -c "import platform; print(platform.architecture())"确认解释器位数。如果是 32 位,要么升级解释器到 64 位,要么找不带 win64 标识的 32 位驱动包。从长远看,建议统一团队环境的解释器位数,避免项目里同时存在 32 位和 64 位解释器,否则驱动版本管理会变得非常混乱。
5.4 杀毒软件静默隔离 msedgedriver.exe
现象:下载解压的时候文件还在,一运行脚本就提示驱动不存在,或者启动瞬间报错。去目录看,发现msedgedriver.exe不见了。
原因:Windows Defender 或企业统一部署的杀毒软件把msedgedriver.exe识别为可疑文件,直接隔离或删除。这类误报在自动化测试工具里不算少见,因为 WebDriver 会被当作“控制浏览器的可疑行为”来处理。
解决:去杀毒软件的隔离区找到被删的文件,选择恢复,然后把驱动所在目录加入信任列表或排除项。更稳妥的做法是把驱动放到项目目录下统一管理,并在杀毒软件里只对该目录做排除,而不是对整个磁盘加白名单。这种事自己电脑上处理好办,公司电脑就得走 IT 申请流程,建议提前和 IT 说明这是自动化测试的标准组件,避免每次安装都被清理。
5.5 下载的包没校验,先被“不是有效的 Win32 应用程序”卡住
现象:解压后双击或由脚本拉起驱动,系统弹窗提示“不是有效的 Win32 应用程序”,或者脚本报同样含义的错误。
原因:下载的 zip 文件本身损坏,或者从非官方镜像下到了一个文件名相同但内容完全不同的包。这种问题在找老版本驱动时特别容易发生,因为 92 这个版本已经比较老了,官方分发页可能把旧版本归档到深层目录,部分镜像站根本没有同步完就放出来,文件不完整。
解决:回到第三章的校验步骤。下载完先用Get-FileHash算 SHA256,和发布页公布的值比对。不一致就换源重新下载,不要抱着“也许能跑”的心态继续尝试。这类文件损坏没有别的高效排查方式,哈希校验是唯一可靠的动作。养成这个习惯之后,遇到这类报错,五分钟内就能定位问题。
6. 进阶:把版本检查写进脚本,一劳永逸
大部分人到“能跑通最小脚本”就停了,驱动靠手动确认、版本靠肉眼对比、出了问题再一个个排查。这套流程一个人用没问题,一旦变成团队协作或者 CI 自动化,就会有人忘记锁版本,有人因为浏览器自动更新踩坑。解决办法是把版本检查从“人工确认”变成“脚本强制”。
6.1 把版本检查做成启动脚本的第一步
我一般会在测试项目的入口脚本里加一段检查逻辑:启动浏览器之前,先读取本机 Edge 的版本号,再读取当前驱动支持的版本,对比一致才继续,不一致直接退出并给出提示。这样不管谁新拉了代码、哪台机器环境变了,第一个报错就能让人明白问题出在哪。
import subprocess import sys def get_edge_major_version(): # 通过驱动自身输出版本信息,也可以改成读注册表或 edge://version 对应接口 output = subprocess.run( [r"D:\tools\edgedriver\msedgedriver.exe", "--version"], capture_output=True, text=True ).stdout return output.split(".")[0].strip() def get_expected_major_version(): # 项目里固定维护期望的浏览器主版本 return "92" if __name__ == "__main__": current = get_edge_major_version() if current != get_expected_major_version(): sys.exit(f"驱动主版本 {current} 与期望版本不一致,请先检查浏览器版本")这段脚本的思路是:让驱动自己输出版本号,和项目配置文件里预期的版本比对。作用是让版本漂移在测试运行前就被拦截,而不是等 Selenium 启动失败后再从一堆堆的报错里找原因。注意驱动版本号和浏览器版本号在这条主版本线上保持一致,所以检查驱动版本,本质上也是确认浏览器环境没有大幅漂移。
6.2 用一份配置文件锁死驱动版本
我更习惯的做法是建一个叫driver-version.json的文件,放在项目根目录,把驱动版本、位数、期望的浏览器主版本、SHA256 值都写进去。脚本启动时读取这份文件来校验。版本要升级,就改这个文件、换驱动包、更新哈希,流程清晰,回滚也容易。
这个习惯是我在一次 CI 集体失败之后养成的。当时某节点的浏览器被自动更新,驱动没有跟着换,一晚上跑了上百次失败任务,日志全指向同一个版本不匹配问题。从那以后,我凡是接入 EdgeDriver 的项目,第一件事就是把版本检查写进启动脚本,配置文件里必须写明驱动版本和路径,绝不允许“手动装一个能用的就行”。希望帮到你。
本文还有配套的精品资源,点击获取