简介:这份资源围绕Chrome历史版本的获取与使用展开,面向需要做浏览器兼容性测试的开发者、测试人员,以及因特定网页或应用不兼容而希望回滚旧版本的用户。包内共14个文件,以json配置、svg图标、js脚本、css样式、html页面及ico、map等前端资源为主,压缩包约450KB,整体呈现一个用于检索和展示Chromium历史版本信息的轻量页面结构。内容涉及Chrome版本号管理、官方与Chromium下载源的区别、HTML5标准在不同版本中的支持差异、版本回滚与安全风险等知识点,可帮助读者理解如何定位并获取所需的历史版本,同时兼顾开发者测试环境搭建与旧版本安装配置的注意事项。目前已有9154人学习下载,适合希望快速了解Chromium历史版本脉络、补充浏览器兼容性排查思路的读者参考。
1. 下载 Chrome 历史版本:为什么老版本比最新版更值得折腾
上周帮一个做自动化测试的朋友排查环境问题,他的脚本在最新版 Chrome 上跑得好好的,换到一台 Win7 老机器上直接白屏。折腾半天发现是 Chromium 内核版本太新,那台机器根本装不上。最后从 Chrome 历史版本里翻出一个 109 的安装包,五分钟解决问题。这件事让我意识到,很多人搜「下载 Chrome 历史版本」不是出于怀旧,而是被现实逼的——老系统兼容、插件依赖、自动化工具锁定内核、企业内网环境不能随便升级,每一个都是硬需求。
Chrome 历史版本下载这件事,表面看只是找一个旧安装包,实际涉及三个层面的问题:去哪里找可信的安装包、怎么确认版本号和系统架构匹配、装完之后怎么防止它自动升级回最新版。这三个问题任何一个没处理好,都会让你白忙一场。这篇文章面向的是需要锁定 Chrome 版本做兼容测试、在老系统上部署浏览器、或者维护特定插件运行环境的从业者。如果你只是想让浏览器变快,那直接更新到最新版就行,不用往下看。
2. Chrome 历史版本的版本号体系与下载渠道拆解
2.1 看懂 Chrome 的四段版本号:88.0.4324.96 每一段代表什么
Chrome 的版本号格式是主版本.次版本.构建号.补丁号,比如88.0.4324.96。主版本号(88)决定了大功能集和内核 API 的基线,次版本号(0)通常为 0 不用太关注,构建号(4324)对应具体的代码提交批次,补丁号(96)是安全修复的递增编号。
对大多数需要锁定版本的场景来说,你只需要关注主版本号。因为 Chromium 内核的 API 变更、Manifest 版本支持、DevTools 协议变动,几乎都发生在主版本号跃迁时。比如 Manifest V2 扩展在 Chrome 127 之后被彻底禁用,如果你的自动化流程依赖某个 V2 扩展,就必须把主版本号锁在 126 或更低。
注意:Chrome 109 是最后一个支持 Windows 7 和 Windows 8.1 的主版本。如果你在搜「chrome 109 win7」或「chrome win7最高版本」,答案就是 109.0.5414.120。再往后的版本在 Win7 上无法安装。
版本号里还有一个容易忽略的点:不同平台的构建号不同。同一个主版本下,Windows 64 位、Windows 32 位、macOS Intel、macOS ARM、Linux 的构建号可能完全不一样。下载时如果选错了平台,安装会直接报错或者装上去行为异常。
2.2 三个可用的下载渠道与各自的适用边界
找 Chrome 历史版本安装包,常见做法有三条路,各有各的适用场景。
第一条路是 Google 官方的 Chromium 构建归档。地址格式是https://commondatastorage.googleapis.com/chromium-browser-snapshots/下面按平台分目录。这里存放的是 Chromium 的持续构建版本,不是 Chrome 品牌版。优点是版本覆盖极全,几乎每个构建号都能找到;缺点是它是 Chromium 而非 Chrome,不带 Google 的自动更新模块、不带 Widevine 解密模块、不带部分编解码器。如果你只是做内核兼容测试,Chromium 够用;如果你需要播放受 DRM 保护的视频,就得用 Chrome 品牌版。
第二条路是第三方归档站点,比如一些技术社区维护的 Chrome 离线安装包集合。这些站点通常按主版本号整理,提供 Windows 和 macOS 的 exe/dmg 文件。优点是下载方便、版本标注清晰;缺点是文件完整性无法完全保证,下载后必须校验数字签名或哈希值。
第三条路是从已安装的旧机器上直接提取。Chrome 的安装目录在 Windows 下通常是C:\Program Files\Google\Chrome\Application\,里面按版本号建子目录。把整个目录拷贝出来,配合注册表信息,可以做成便携版。这条路适合企业内网批量部署,不依赖外网下载。
| 渠道 | 版本覆盖 | 平台支持 | 文件类型 | 适用场景 |
|---|---|---|---|---|
| Chromium 构建归档 | 极全 | Win/Mac/Linux | zip | 内核兼容测试 |
| 第三方归档站 | 主流版本 | Win/Mac | exe/dmg | 快速获取品牌版 |
| 本地提取 | 仅已装版本 | 同源平台 | 目录拷贝 | 内网批量部署 |
2.3 下载前的三个确认动作:架构、系统、签名
在点下载按钮之前,先确认三件事,能省掉后面 80% 的翻车。
第一,确认目标机器的 CPU 架构。Windows 上打开「设置 → 系统 → 关于」,看「系统类型」是 64 位还是 32 位。虽然现在绝大多数机器是 64 位,但一些老工控机、嵌入式设备仍然是 32 位。Chrome 从某个版本之后就不再提供 32 位 Windows 构建了,如果你需要 32 位版本,主版本号要往下压。
第二,确认操作系统的具体版本。Windows 7 SP1、Windows 8.1、Windows 10 的不同小版本对 Chrome 的支持范围不同。macOS 那边更复杂,Chrome 对 macOS 的最低版本要求几乎每年都在提高。下载页面通常会标注「需要 macOS XX 或更高版本」,别忽略这行小字。
第三,下载完成后校验文件。Windows 上右键 exe 文件 → 属性 → 数字签名,看签名者是不是 Google LLC。如果没有签名或者签名无效,直接删掉。macOS 上用codesign -dv --verbose=4 /path/to/Google\ Chrome.app检查签名链。
# macOS 下校验 Chrome 应用签名 codesign -dv --verbose=4 "/Applications/Google Chrome.app" 2>&1 | grep -E "Authority|TeamIdentifier" # 预期输出类似: # Authority=Developer ID Application: Google LLC # TeamIdentifier=EQHXZ8M8AV这段命令的作用是提取 Chrome 应用的签名颁发机构和团队标识。Authority行确认是 Google 官方签名,TeamIdentifier是 Google 的开发者团队 ID。如果这两行缺失或值不对,说明这个安装包被篡改过或者来自非官方渠道。
3. 在 Windows 上安装并锁定 Chrome 历史版本
3.1 离线安装包的静默安装参数与实操命令
拿到 Chrome 历史版本的离线安装包(通常是ChromeStandaloneSetup64.exe或类似命名)之后,双击安装是最简单的方式,但如果你需要在多台机器上批量部署,或者安装过程中不想被各种提示打断,就需要用静默安装参数。
Chrome 离线安装包支持的常用参数:
| 参数 | 含义 | 使用场景 |
|---|---|---|
/silent | 静默安装,不显示界面 | 批量部署 |
/install | 执行安装 | 配合其他参数 |
/verbose-logging | 输出详细日志 | 排查安装失败 |
--system-level | 系统级安装 | 所有用户可用 |
一条完整的静默安装命令:
# 以管理员身份运行 CMD,执行静默安装 ChromeStandaloneSetup64.exe /silent /install --system-level # 如果需要记录安装日志,加上 verbose-logging ChromeStandaloneSetup64.exe /silent /install --system-level /verbose-logging/silent让安装程序不弹出任何界面,/install明确告诉它执行安装动作而不是解压,--system-level把 Chrome 装到Program Files下而不是用户目录,这样机器上所有账户都能用同一个版本。安装日志默认会写到%TEMP%目录下,文件名类似chrome_installer.log,安装失败时第一时间去看这个文件。
提示:静默安装完成后,Chrome 默认会启动一次并尝试连接更新服务器。如果你不希望它立刻检查更新,可以在安装完成后先断网,或者提前配置好更新策略(下一节讲)。
3.2 用注册表策略关掉自动更新:防止一夜回到最新版
装好旧版本之后最大的坑就是:Chrome 会在后台自动更新,可能你睡一觉起来,版本已经变回最新了。要彻底锁住版本,必须从更新策略入手。
Chrome 在 Windows 上的自动更新由 Google Update 服务控制。你可以通过注册表禁用更新,或者把更新地址指向一个无效地址。
# 以管理员身份运行,禁用 Google Update 自动更新 reg add "HKLM\SOFTWARE\Policies\Google\Update" /v DisableAutoUpdateChecks /t REG_DWORD /d 1 /f # 同时把更新检查周期设为极大值(单位:秒) reg add "HKLM\SOFTWARE\Policies\Google\Update" /v AutoUpdateCheckPeriodMinutes /t REG_DWORD /d 0 /f # 如果只想针对 Chrome 而不影响其他 Google 产品 reg add "HKLM\SOFTWARE\Policies\Google\Update\Apps\Google Chrome" /v UpdatePolicyOverride /t REG_DWORD /d 0 /f第一条命令在策略层禁用自动更新检查,DisableAutoUpdateChecks设为 1 表示不再主动检查。第二条把检查周期设为 0,进一步确保不会触发。第三条是针对 Chrome 单独设置更新策略覆盖,UpdatePolicyOverride设为 0 表示不自动更新。
改完注册表后,需要重启 Google Update 服务让策略生效:
# 重启 Google Update 服务 net stop gupdate net stop gupdatem net start gupdategupdate是 Google Update 的核心服务,gupdatem是它的辅助服务。停掉再启动,策略就会重新加载。如果你在服务列表里找不到这两个服务,说明这台机器上没装 Google Update,那反而省事了。
3.3 验证版本锁定是否生效:三个检查点
装完、锁完,怎么确认真的锁住了?三个检查点。
第一个检查点:打开 Chrome,地址栏输入chrome://version,看第一行的版本号是不是你安装的那个。同时看「Google Update」那一行,如果显示「已禁用」或类似状态,说明策略生效了。
第二个检查点:等 24 小时后再看一次chrome://version。如果版本号没变,说明自动更新确实被挡住了。这个等待测试虽然笨,但最可靠。
第三个检查点:手动触发一次更新检查,看它是否报错。在chrome://settings/help页面,正常情况下它会自动检查更新并下载。如果策略生效,这个页面会显示「无法更新」或者一直停在检查中。
# 通过命令行查看 Chrome 当前版本 wmic datafile where name="C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe" get Version /value # 输出示例: # Version=109.0.5414.120这条wmic命令直接从可执行文件的属性里读版本号,不依赖 Chrome 界面。适合在脚本里做自动化检查。注意路径里的反斜杠要写两遍,这是wmic的转义要求。
4. 下载 Chrome 历史版本时最容易踩的五个坑
4.1 坑一:下载的安装包装完变成最新版
现象:明明下载的是 109 的安装包,装完打开chrome://version显示的是最新版本。
原因:Chrome 离线安装包在安装完成后会立即触发一次在线更新检查,如果网络通畅,它会在后台静默下载最新版并替换。你看到的「装完就是最新版」其实是安装器自己更新了。
解决:安装前先断网,或者提前把更新策略注册表写好再安装。如果已经装完了,按 3.2 节的方法禁用更新,然后卸载重装旧版本。
4.2 坑二:Win7 上装 Chrome 109 提示缺少 API
现象:在 Windows 7 SP1 上安装 Chrome 109 时,弹出「无法定位程序输入点」或「缺少 api-ms-win-core-xxx.dll」的错误。
原因:Chrome 109 虽然是最后一个支持 Win7 的版本,但它依赖一些 Windows 7 默认不带有的系统更新补丁。如果那台 Win7 没有安装 KB2533623 或 KB4474419 等补丁,就会缺 DLL。
解决:先给 Win7 打齐系统补丁,尤其是 SHA-2 签名支持和通用 C 运行时更新。如果补丁打不了(比如内网限制),那就只能继续往下降 Chrome 版本,降到 90 以下通常对补丁要求更低。
4.3 坑三:扩展程序在旧版本上无法加载
现象:装好 Chrome 旧版本后,之前用的扩展程序全部消失,或者手动加载时提示「清单版本不受支持」。
原因:Chrome 从某个版本开始强制要求扩展使用 Manifest V3,而旧版本可能只支持 V2,或者反过来。另外,Chrome 网上应用店会自动给扩展推送最新版,最新版扩展可能不兼容你的旧 Chrome。
解决:找到扩展的历史版本 crx 文件,用开发者模式手动加载。加载前把扩展的manifest.json里的minimum_chrome_version字段改低,或者直接找标注了兼容旧版 Chrome 的扩展版本。
4.4 坑四:便携版 Chrome 无法保存登录状态
现象:把 Chrome 目录拷贝到 U 盘做成便携版,每次打开都需要重新登录所有网站,书签和密码也不保存。
原因:Chrome 默认把用户数据存在%LOCALAPPDATA%\Google\Chrome\User Data下,便携版如果没有指定用户数据目录,它会去读系统默认路径,而系统路径下可能没有数据或者被其他版本占用。
解决:启动时用--user-data-dir参数指定数据目录:
# 便携版 Chrome 启动命令,指定用户数据目录 chrome.exe --user-data-dir="D:\PortableChrome\UserData" --disable-logging --no-first-run--user-data-dir把用户数据重定向到指定目录,--no-first-run跳过首次运行向导,--disable-logging减少日志输出。这样每次启动都会读写同一个数据目录,登录状态和书签就能保留。
4.5 坑五:chrome://extensions/ 页面打不开或白屏
现象:在旧版本 Chrome 里访问chrome://extensions/时页面白屏,控制台报错。
原因:Chrome 的内部页面(chrome:// 开头)在不同版本间有变动。旧版本的扩展管理页面可能依赖某些已被移除或尚未加入的 API。另外,如果之前用策略禁用了开发者模式,扩展页面也会异常。
解决:先检查chrome://policy看有没有禁用扩展相关的策略。如果有,把对应的注册表项删掉。如果页面仍然白屏,尝试用--enable-logging --v=1启动 Chrome,看日志里具体是哪个资源加载失败。
5. 用命令行和脚本批量管理多版本 Chrome
5.1 用批处理脚本一键切换 Chrome 版本
如果你需要频繁在不同 Chrome 版本之间切换做兼容测试,手动卸载重装太慢。更高效的做法是:把多个版本的 Chrome 分别装在不同目录,用脚本切换快捷方式指向的 exe。
@echo off REM switch_chrome.bat - 切换 Chrome 版本 REM 用法:switch_chrome.bat 109 或 switch_chrome.bat 120 setlocal set TARGET_VERSION=%1 set CHROME_BASE=C:\ChromeVersions set TARGET_DIR=%CHROME_BASE%\Chrome_%TARGET_VERSION% REM 检查目标版本目录是否存在 if not exist "%TARGET_DIR%\chrome.exe" ( echo [ERROR] 版本 %TARGET_VERSION% 未安装,请先下载并解压到 %TARGET_DIR% exit /b 1 ) REM 更新桌面快捷方式指向 set SHORTCUT=%USERPROFILE%\Desktop\Chrome.lnk powershell -Command "$ws = New-Object -ComObject WScript.Shell; $sc = $ws.CreateShortcut('%SHORTCUT%'); $sc.TargetPath = '%TARGET_DIR%\chrome.exe'; $sc.Save()" echo [OK] Chrome 已切换到版本 %TARGET_VERSION% endlocal这个批处理脚本接收一个版本号参数,检查对应目录下有没有chrome.exe,然后用 PowerShell 更新桌面快捷方式的目标路径。WScript.Shell是 Windows 自带的 COM 对象,不需要额外安装任何东西。$sc.TargetPath设置快捷方式指向的可执行文件,$sc.Save()把修改写回磁盘。
使用前需要先把不同版本的 Chrome 解压到C:\ChromeVersions\Chrome_109、C:\ChromeVersions\Chrome_120这样的目录下。每个目录里放对应版本的完整 Chrome 文件。
5.2 用 Python 脚本检查所有版本的更新状态
当你管理多台机器上的多个 Chrome 版本时,手动一台台检查chrome://version不现实。写个 Python 脚本批量检查。
import subprocess import re import os # 定义要检查的 Chrome 安装路径列表 CHROME_PATHS = [ r"C:\Program Files\Google\Chrome\Application\chrome.exe", r"C:\ChromeVersions\Chrome_109\chrome.exe", r"C:\ChromeVersions\Chrome_120\chrome.exe", ] def get_chrome_version(exe_path): """通过 wmic 获取指定 chrome.exe 的版本号""" if not os.path.exists(exe_path): return None # wmic 需要双反斜杠转义 escaped = exe_path.replace("\\", "\\\\") cmd = f'wmic datafile where name="{escaped}" get Version /value' result = subprocess.run(cmd, shell=True, capture_output=True, text=True) match = re.search(r"Version=(\S+)", result.stdout) return match.group(1) if match else "未知" def check_update_policy(): """检查注册表中的更新策略是否生效""" cmd = 'reg query "HKLM\\SOFTWARE\\Policies\\Google\\Update" /v DisableAutoUpdateChecks' result = subprocess.run(cmd, shell=True, capture_output=True, text=True) if "0x1" in result.stdout: return "已禁用" return "未禁用或未配置" if __name__ == "__main__": print(f"更新策略状态: {check_update_policy()}") print("-" * 40) for path in CHROME_PATHS: version = get_chrome_version(path) if version: print(f"[已安装] {path}") print(f" 版本: {version}") else: print(f"[未找到] {path}")脚本里get_chrome_version函数用wmic查询文件版本属性,subprocess.run执行命令并捕获输出,正则提取Version=后面的内容。check_update_policy函数查询注册表里的DisableAutoUpdateChecks值,判断更新是否被禁用。0x1是注册表里 DWORD 值 1 的十六进制表示。
这个脚本可以扩展成定时任务,每天跑一次,把结果写到日志文件里。一旦发现某个版本的 Chrome 版本号变了,就说明更新策略失效了,需要去排查。
5.3 用符号链接让多个版本共享用户数据
多版本切换时还有一个麻烦:每个版本如果用自己的用户数据目录,书签、密码、登录状态都不互通。用符号链接可以让它们共享同一份用户数据。
# 创建共享用户数据目录 mkdir D:\ChromeSharedData # 为每个版本创建符号链接指向共享目录 mklink /D "C:\ChromeVersions\Chrome_109\UserData" "D:\ChromeSharedData" mklink /D "C:\ChromeVersions\Chrome_120\UserData" "D:\ChromeSharedData"mklink /D创建目录符号链接,第一个参数是链接路径,第二个参数是目标路径。这样每个 Chrome 版本启动时用--user-data-dir指向自己目录下的UserData,实际读写的是同一个共享目录。
注意:不同大版本的 Chrome 用户数据结构可能不兼容。用共享数据目录时,尽量选择版本差距不大的 Chrome(比如 109 和 110),差距太大可能导致配置文件损坏。切换前先备份
D:\ChromeSharedData。
6. 一个老版本 Chrome 的实战技巧:用 DevTools 协议做自动化
老版本 Chrome 有一个被低估的用途:它的 DevTools 协议(CDP)接口比新版本更稳定,因为新版本经常改协议字段。如果你在用 Playwright 或 Puppeteer 做自动化,锁定一个 CDP 协议稳定的 Chrome 版本能省很多事。
具体做法是:启动 Chrome 时加上--remote-debugging-port参数,然后用 HTTP 请求获取调试端点。
# 启动 Chrome 并开启远程调试端口 chrome.exe --remote-debugging-port=9222 --user-data-dir="D:\ChromeDebugProfile" --no-first-run # 另一个终端里查询调试端点 curl http://localhost:9222/json/version--remote-debugging-port=9222让 Chrome 在 9222 端口上暴露 CDP 接口。curl请求/json/version会返回浏览器版本、WebSocket 调试地址等信息。Playwright 和 Puppeteer 就是通过这个接口连接浏览器的。
我一般会把这个和前面的版本锁定结合起来:锁定一个 CDP 协议没大改的 Chrome 版本(比如 109 到 115 之间),然后在这个版本上跑自动化脚本。这样脚本不会因为 Chrome 自动更新导致协议变动而突然挂掉。血泪经验是:曾经有一次 Chrome 自动更新到最新版,CDP 的Page.navigate返回字段变了,整个爬虫脚本全挂,排查了一下午才发现是浏览器版本的问题。从那以后,所有跑自动化的机器我都锁死 Chrome 版本,并且把更新策略写进部署脚本里。
希望帮到你。
本文还有配套的精品资源,点击获取