ChromeDriver下载链接实战指南:版本匹配与自动化获取
发布时间:2026/9/20 3:53:35 作者:尧图编辑部 阅读量:1,286

做 Web 自动化的人恐怕都经历过这种场面Selenium 装好了Chrome 也在正常用结果webdriver.Chrome()一跑直接给我抛一个SessionNotCreatedException或者干脆提示cannot find ChromeDriver binary。去网上搜 ChromeDriver 下载链接出来的页面一个比一个乱版本号和我本机的 Chrome 又永远对不上。这篇文章就把 ChromeDriver 各版本下载链接这件事一次性讲透从版本匹配逻辑、官方目录结构到链接拼写规律、脚本批量取地址按实战顺序走一遍。1. 版本匹配是第一步别让 Chrome 和 ChromeDriver 各说各话很多人找不到正确的下载链接根本原因是没搞明白 Chrome 和 ChromeDriver 的版本关系。这两者不是同一个软件ChromeDriver 可以理解成 Chrome 的“遥控器”Selenium 通过这个遥控器去指挥浏览器。既然是遥控器频道必须对得上。1.1 版本号四段位到底怎么对应Chrome 的版本号通常是四段比如114.0.5735.110或者128.0.6613.137。ChromeDriver 的版本号同样是四段。二者的对应规则并不复杂主版本号第一段必须一致。Chrome 是 114ChromeDriver 就应该是 114.x.x.x这是最基础的匹配条件。后面三段尽量靠拢。Chrome 是114.0.5735.110ChromeDriver 用114.0.5735.90通常也没问题因为补丁号差异一般不影响 WebDriver 协议。如果找不到完全一样的版本优先选主版本号相同、后面三位数最大的 ChromeDriver而不是去跨版本下载。我把常见匹配情况整理成了一张表方便对照本机 Chrome 版本理想 ChromeDriver 版本兼容程度114.0.5735.110114.0.5735.90推荐多数场景可用128.0.6613.137128.0.6613.137最省心117.0.5938.149116.x.x.x不推荐可能有兼容问题118.0.5993.70117.0.5865.xx不建议有些老教程建议“ChromeDriver 版本可以比 Chrome 低一个版本”这在极少数旧版本里碰巧能跑但遇到新版浏览器基本都会翻车。我自己的原则是下载前先确认主版本号主版本一致再谈其他。1.2 三分钟确认本机 Chrome 版本找到正确下载链接的第一步是知道自己浏览器的版本。方法有几种在 Chrome 地址栏输入chrome://version第一行就是完整版本号。点击右上角三个点进入“帮助—关于 Chrome”也能看到。Linux 下可以直接执行google-chrome --versionmacOS 执行/Applications/Google Chrome.app/Contents/MacOS/Google Chrome --versionWindows 的 Chrome 安装在C:\Program Files\Google\Chrome\Application\chrome.exe可以直接看文件属性里的版本信息。这里有个特别容易被忽略的地方Chrome 默认开启自动更新。你今天查到的版本是127.0.6533.119过两周可能就变成了131.0.6778.86。所以不要把版本号写死在笔记里每次搭环境都要重新确认一遍。1.3 版本不匹配时会看到什么版本不匹配的报错很有辨识度最常见的两类SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 116 Current browser version is 131.0.6778.86 with binary path ...另一种是WebDriverException: Message: unknown error: cannot find Chrome binary前一种说明 ChromeDriver 和 Chrome 主版本不一致后一种说明 ChromeDriver 找到了但找不到 Chrome 本体属于路径配置问题。这两种问题的下载策略完全不同前者要换 ChromeDriver 版本后者要检查binary_location。2. 官方下载链接的目录演进115 版本是个分水岭很多教程还在讲旧的下载地址等你点进去一看页面目录根本没有新版文件。这不能怪教程ChromeDriver 的官方下载结构确实有过一次比较大的调整。2.1 旧版目录对应 115 之前的 ChromeDriver在 Chrome 115 之前ChromeDriver 的下载入口主要是官方文档页chromedriver.chromium.org/downloads实际文件则托管在chromedriver.storage.googleapis.com下。打开这个地址能看到按版本号排列的目录比如114.0.5735.90/、109.0.5414.74/。旧版目录里没有平台子目录平台标识直接体现在 zip 文件名中。比如chromedriver_win32.zip chromedriver_linux64.zip chromedriver_mac64.zip也就是说如果你要下载的是 ChromeDriver 114 的 Windows 版本对应的完整下载链接是这个形态https://chromedriver.storage.googleapis.com/114.0.5735.90/chromedriver_win32.zip注意文件名是chromedriver_win32.zip用的是下划线不是中划线。很多人在拼链接时就栽在这个细节上复制文档里的 URL 没问题自己手写就容易写错。2.2 新版目录115 及之后基本都在这里从 Chrome 115 开始官方把 ChromeDriver 归入了 Chrome for Testing 项目下载地址也整体迁移。现在 115 之后的版本主要从两个地址获取版本清单和最新版本号https://googlechromelabs.github.io/chrome-for-testing/文件本体https://storage.googleapis.com/chrome-for-testing-public/新版目录的结构比旧版清晰一些先按版本号分目录再按平台分子目录最后才是 zip 包。比如https://storage.googleapis.com/chrome-for-testing-public/128.0.6613.137/win64/chromedriver-win64.zip这里的路径规律非常明确https://storage.googleapis.com/chrome-for-testing-public/{版本号}/{平台目录}/chromedriver-{平台目录}.zip平台目录的值包括win32、win64、linux64、mac-x64、mac-arm64。注意新版文件名用的是中划线和旧版的下划线不一样。2.3 新老目录怎么选择如果你追的浏览器版本比较新直接用新版目录。如果你的项目还在维护老旧的自动化脚本用的 Chrome 是 110 甚至更早那就得去旧版目录找。有一点值得注意新版目录理论上也覆盖了一部分旧版本资产但老项目为了稳定我建议优先用老版本对应的原始链接不要轻易混用。从目录演进能看出一个趋势官方越来越希望用户通过版本清单接口去拿链接而不是手动翻目录页。这也引出了后面要讲的脚本化下载思路。3. 手工拼链接的技巧一份链接格式速查表即使官方给了页面手动点击下载依然很费劲尤其是要替不同同事下载不同版本时。学会拼链接之后整个过程可以压缩到几十秒。3.1 旧版通用链接格式旧版 ChromeDriver 的链接格式非常固定https://chromedriver.storage.googleapis.com/{完整版本号}/chromedriver_{平台}.zip平台部分按操作系统填写Windowswin32Linuxlinux64macOS 英特尔mac64举例https://chromedriver.storage.googleapis.com/114.0.5735.90/chromedriver_win32.zip https://chromedriver.storage.googleapis.com/114.0.5735.90/chromedriver_linux64.zip https://chromedriver.storage.googleapis.com/114.0.5735.90/chromedriver_mac64.zip3.2 新版通用链接格式新版格式多了一层平台子目录https://storage.googleapis.com/chrome-for-testing-public/{完整版本号}/{平台}/chromedriver-{平台}.zip平台取值和旧版不同要特别留意操作系统平台目录文件名Windows 32 位win32chromedriver-win32.zipWindows 64 位win64chromedriver-win64.zipLinux 64 位linux64chromedriver-linux64.zipmacOS 英特尔mac-x64chromedriver-mac-x64.zipmacOS Apple Siliconmac-arm64chromedriver-mac-arm64.zip举例https://storage.googleapis.com/chrome-for-testing-public/131.0.6778.86/linux64/chromedriver-linux64.zip https://storage.googleapis.com/chrome-for-testing-public/131.0.6778.86/mac-arm64/chromedriver-mac-arm64.zip一个容易搞混的地方是新版目录里版本号后面紧跟平台目录但平台目录名和 zip 文件名几乎一样只差一个中划线或下划线。写链接时不要凭感觉拿一个已知链接对比着改。3.3 用 curl 直接拉取压缩包拼好链接后用curl下载最省事。以新版 Linux 64 位为例curl -L -o chromedriver.zip \ https://storage.googleapis.com/chrome-for-testing-public/131.0.6778.86/linux64/chromedriver-linux64.zipWindows 上如果安装了 curl同样可以执行。-L参数不能省因为storage.googleapis.com的请求经常会有 301 跳转少了这个参数会下载到空文件或重定向提示页。PowerShell 用户也可以用Invoke-WebRequest$url https://storage.googleapis.com/chrome-for-testing-public/131.0.6778.86/win64/chromedriver-win64.zip Invoke-WebRequest -Uri $url -OutFile chromedriver.zip下载完成后别急着解压先看一眼文件大小。正常 zip 包在几 MB 到十几 MB 之间如果只有几百字节八成是链接拼错了。4. 用公开 JSON 批量获取各版本下载地址手动拼链接适合一次性下载但如果你在维护一套测试环境隔三差五就要换个版本那就得让操作自动化。Chrome for Testing 项目其实已经提供了机器可读的版本清单不需要写爬虫去抓网页。4.1 known-good-versions-with-downloads.json 里有什么官方维护了一个 JSON 文件记录了各版本的下载地址https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json这个文件比较大因为它包含的版本数非常多。整体结构类似下面这样{ timestamp: 2025-01-15T03:42:11.753Z, versions: [ { version: 131.0.6778.86, revision: 1234567, downloads: { chrome: [], chromedriver: [ { platform: linux64, url: https://storage.googleapis.com/chrome-for-testing-public/131.0.6778.86/linux64/chromedriver-linux64.zip } ] } } ] }注意downloads对象里除了chromedriver还有chrome字段。如果你不想用本机装的 Chrome可以直接从这个 JSON 里拿“配套版 Chrome”的下载链接这样就完全不用考虑自动更新带来的版本漂移问题了。4.2 用 Python 脚本查版本、拼链接、直接下载我一般用 Python 写个短脚本先读 JSON再按主版本号过滤。下面这个例子会列出 131 开头的所有 ChromeDriver 下载地址import json import urllib.request url https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json data json.load(urllib.request.urlopen(url)) for version_item in data[versions]: version version_item[version] if version.startswith(131.): for driver in version_item[downloads].get(chromedriver, []): print(version, driver[platform], driver[url])如果只想取 131 主版本里最新的那一个可以在循环里记录第一个匹配项后break因为接口返回的版本列表默认按时间倒序排列最前面的就是最新版本。拿到 URL 后可以直接结合上一节的 curl 思路把下载和解压一起处理。下面是一个更完整的 Linux 示例脚本#!/usr/bin/env bash set -e MAJOR$1 DRIVER_VERSION$(curl -s https://googlechromelabs.github.io/chrome-for-testing/LATEST_RELEASE_${MAJOR}) echo 当前 ${MAJOR} 主版本的最新 ChromeDriver 版本号${DRIVER_VERSION} DOWNLOAD_URLhttps://storage.googleapis.com/chrome-for-testing-public/${DRIVER_VERSION}/linux64/chromedriver-linux64.zip curl -L -o chromedriver.zip $DOWNLOAD_URL unzip -o chromedriver.zip sudo mv chromedriver-linux64/chromedriver /usr/local/bin/ chmod x /usr/local/bin/chromedriver这个脚本里用到了LATEST_RELEASE_${MAJOR}这个接口。它的存在很有用比如我想拿 130 主版本的最新 ChromeDriver直接访问https://googlechromelabs.github.io/chrome-for-testing/LATEST_RELEASE_130返回的是一行文本比如130.0.6723.91非常适合用于自动化安装。另有LATEST_RELEASE_STABLE可以获取当前全局稳定版版本号。4.3 为什么我建议固定版本而不是追“最新”很多自动化项目习惯每次运行前拉取最新版 ChromeDriver这样确实能省去维护成本但也带来了新的不稳定因素浏览器更新后页面渲染行为可能变化测试结果会出现“刚才还过现在挂”的假性失败。我的做法是每个项目锁一个 ChromeDriver 版本比如固定130.0.6723.91同时让 Chrome 使用 Chrome for Testing 里同版本的包两头都固定。升级版本是主动行为而不是被动等浏览器自动更新。这样做不是怕新技术而是让每次环境变化都处在可控状态。5. 下载之后的验证与排错解压只是开始链接拿到了压缩包也下载好了但这只是开始。很多人卡在“下载完却仍然启动失败”往往不是版本问题而是操作系统层面的路径或权限问题。5.1 不同系统的解压和路径配置Windows解压 zip 后得到一个chromedriver.exe我习惯放在固定目录比如C:\webdriver\。不需要把整个 zip 内容分散到系统目录只要让 selenium 能找到 exe 路径就行。最稳妥的方式是把C:\webdriver加入系统环境变量 PATH这样代码里不用写绝对路径。配置 PATH 后务必重新打开命令行窗口否则新配置不生效这是个特别容易踩的坑。LinuxLinux 下解压后需要手动加执行权限unzip chromedriver-linux64.zip sudo mv chromedriver-linux64/chromedriver /usr/local/bin/ sudo chmod x /usr/local/bin/chromedriver如果不执行chmod x启动时会提示权限不够看起来像版本不匹配其实是文件没有执行权限。macOSmacOS 新版系统对非 App Store 应用有隔离属性。下载后双击解压第一次运行可能提示“无法验证开发者”。遇到这种情况可以右键点“打开”一次或者手动移除隔离属性xattr -d com.apple.quarantine /usr/local/bin/chromedriver5.2 版本和启动验证命令不管什么系统解压后的第一件事是跑chromedriver --version看看输出的版本号是否和预期一致chromedriver --version正常输出类似ChromeDriver 131.0.6778.86 (0000000000000000000000000000000000000000-refs/branch-heads/6778{#1})如果这个命令都跑不通说明 PATH 或文件本身有问题和 selenium 代码无关先把这一步解决。接下来再写一个最小化脚本验证浏览器能真正起来from selenium import webdriver from selenium.webdriver.chrome.service import Service service Service(/path/to/chromedriver) driver webdriver.Chrome(serviceservice) driver.get(https://example.com) print(driver.title) driver.quit()如果这段能跑通说明 ChromeDriver 下载、解压、路径配置全部没问题。5.3 实测过程中最常见的 5 个坑我在不同操作系统上帮别人排查过太多次类似问题总结出下面几个高发原因现象直接原因解决办法启动报This version of ChromeDriver only supports Chrome version 116ChromeDriver 与 Chrome 主版本不一致下载匹配的 ChromeDriver 版本启动报cannot find Chrome binaryChromeDriver 找到但找不到 Chrome 本体在代码里指定binary_location卡在Timed out waiting for driver server to startchromedriver 路径错误、权限不足或端口被占用检查文件路径、加执行权限、关闭残留进程有多个 ChromeDriver 在 PATH 中不同项目装了不同版本命令解析到了旧版本用which chromedriver定位按项目单独指定路径自动化跑一段时间后突然全部失败Chrome 自动更新版本号变了固定 Chrome for Testing 版本或重新下载匹配 driver关于端口占用要特别说明ChromeDriver 默认监听9515端口如果前一个脚本异常退出端口可能被残留进程占用。Windows 下可以用任务管理器结束chromedriver.exeLinux 下执行pkill -f chromedriver然后再跑脚本。6. 几个让我少走弯路的日常习惯最后聊几个实际操作层面的习惯。它们不复杂但能避免大量无效下载和排查时间。第一个习惯是永远不要只把下载链接存在浏览器收藏夹里。收藏夹里的链接很可能只是当时那个版本的页面Chrome 一旦自动更新链接马上失效。我现在的做法是维护一个简单的版本速查文档里面记录当前项目依赖的 Chrome 版本、ChromeDriver 版本和对应下载地址格式每次只改版本号不重新找链接。第二个习惯是尽量用脚本而不是手动下载。哪怕是单次部署我也会先执行一条 curl 或 Python 命令拿到版本号再下载。这样一旦出问题历史命令里能看到当时用的是哪个版本方便回溯。下面这个命令可以直接查看当前稳定版 ChromeDriver 版本号curl -s https://googlechromelabs.github.io/chrome-for-testing/LATEST_RELEASE_STABLE第三个习惯是不要在一个环境里同时放置多个主版本的 ChromeDriver。多个版本文件同时存在于 PATH 中很容易取到错误的那个。如果你的项目需要同时跑不同版本的浏览器我建议在 selenium 代码里显式指定executable_path而不是依赖系统 PATH。这也解释了为什么在 CI 环境里我更倾向于写一个下载脚本来按项目需求精确布置对应版本而不是让所有任务都去找同一个路径下的单一 chromedriver。还有一点值得提醒ChromeDriver 是持续更新的新版本会修复一些协议兼容问题但也会调整默认行为。如果你在升级 ChromeDriver 后遇到从未见过的报错先不要急着怀疑浏览器仔细核对chromedriver --version输出和 chromechrome://version的版本号通常问题都出在这里。