资讯动态

Chrome历史版本下载全攻略:官方接口+脚本实操+避坑指南

发布时间:2026/10/13 3:34:13 来源:尧图企业网站定制
简介这是一份面向开发者和测试人员的Chrome/Chromium历史版本归档资源解决因兼容性测试、功能验证或版本回滚需要下载旧版浏览器的问题。压缩包共450KB包含14个文件其中6个JSON记录版本、操作系统与位置等元数据另有SVG图标、CSS样式、JavaScript脚本、HTML页面及说明文档整体呈现一个可直接运行的版本查询工具或静态站点。已有9570人学习下载。通过该资源可快速检索特定Chrome/Chromium历史版本对应的下载入口了解版本号与操作系统的匹配关系同时熟悉以HTMLCSSJS构建轻量级查询工具的思路配有的README和版本映射JSON便于二次开发时扩展数据或调整展示逻辑。适合需要批量比对历史版本、搭建内部下载索引或研究Chromium发布规律的技术人员。1. 下载-Chrome的历史版本为什么“装个旧版”会变成一项工程做前端兼容测试、给老机器装浏览器、复现用户那边独有的白屏问题你会很快撞上一个矛盾Chrome 默认只会悄无声息地更新到最新版官方首页也只给当前版本。想拿到“某个具体历史版本”的安装包很多人第一反应是去第三方网站搜结果不是下到捆绑 installer就是装完发现版本根本不是自己要的那个。这篇笔记就用一条完整的实操路径说清楚去哪儿找、怎么精准命中、装完怎么防它被自动升级覆盖。要说明的是这里讨论的都是正规下载与离线安装手段不涉及任何规避网络限制的工具或插件。适合开发测试、企业内网基线部署、老设备兼容性验证这几类场景。2. 从哪找历史版本官方通道与第三方存档的取舍2.1 Chrome 的发布节奏和自动更新机制决定了旧版本“天生难找”Chrome 的分发方式和其他软件不太一样。它不是一个“你下载了就一直用这个文件”的软件而是一个带强自动更新策略的浏览器。官方分 Stable、Beta、Dev、Canary 四个渠道其中 Stable 就是绝大多数人日常使用的渠道每隔几周就会推出一个新的大版本Beta 和 Dev 是预发布渠道Canary 则是几乎每日更新的实验渠道。由于自动更新默认开启普通人装上 Chrome 之后根本感觉不到“版本”这个概念它永远在后台默默换新。而对企业或开发者来说这恰恰是最麻烦的一点你的自动化测试脚本、企业内部的 Web 应用、某些只兼容旧内核的网页系统往往只在一段特定版本区间内表现正常。你不可能跟用户说“请你在设置里关掉自动更新”因为大多数人不会也找不到那个入口。这就引出一个核心结论下载历史版本的刚需是真实存在的但 Chrome 官方并没有把“历史版本下载页”做成一个公开的常驻页面。它更希望你始终用最新版。所以做这件事的正路是利用官方提供的版本历史查询接口拿到准确的版本号和官方下载地址再配合离线安装包完成部署。第三方存档站只是退而求其次的备选且风险不小。这里先说清楚一个容易被混淆的点历史版本不等于“所有老版本都能直接覆盖安装”。Chrome 安装包本身是支持完整离线安装的但版本之间有明显的前后关系约束你没法用一个老版本直接盖在一个新版本之上。这个约束后面会专门讲先记住“下载”只是第一步装得上、装完不被更新才是完整闭环。2.2 正路官方版本历史接口与官方下载节点的组合我一般会先打开 Chrome 官方提供的版本历史接口拿数据。这个接口的域名形如versionhistory.googleapis.com根路径下按platform / channel / version的层级组织数据。官方用它来同步各渠道、各平台、各版本对应的版本号与发布时间数据是公开的不需要任何登录凭据。常见的做法是分三步走先确定你要哪个平台Windows、Mac、Linux或者 Android。接口里的平台标识是win、mac、linux、android这类短名称。再确定渠道stable、beta、dev、canary四选一。日常测试绝大多数用stable。最后从返回的列表里挑版本号。列表顺序一般按发布时间从近到远排列最顶部是当前最新往后翻就是历史版本。这一步不需要任何特殊工具浏览器直接访问接口地址就能看到 JSON 返回。比如你想看 Windows 平台 Stable 渠道有哪些版本接口路径大致是/v1/chrome/platforms/win/channels/stable/versions返回的versions数组里每一项都带version和release_time字段。我通常只关心这两个字段一个用来对版本号一个用来判断这个版本是不是接近我要的时间点。真正的下载文件则统一存放在官方下载节点域名形如dl.google.com下。不同平台的安装包命名和路径有规律Windows 的安装包常见名字里带chrome_installer.exe或类似特征macOS 则是.dmg或.pkg后缀。这里有个关键点官方下载节点只保留近期版本的直链更老的版本文件不一定还在原路径上。所以我对“官方历史版本”这件事的理解是版本信息是完整的文件本身则有时效性。把这两点连起来就是完整方案先用官方接口确定版本号再向官方下载节点发起请求。全程不经过第三方文件来源可控校验也简单。2.3 备用路第三方归档站与自建存档的适用范围第三方 Chrome 历史版本站是真实存在的做这件事的人也确实是出于方便开发者的目的。这类站点的价值在于它们把各平台的安装包按版本号整理成了列表页省去了你自己拼接口的步骤。对只想要一个特定版本、且只需要下载一次的人来说这看起来确实更省事。但你得清楚第三方站点的三个风险。第一文件来源不可控。站点管理员从哪拿的安装包、有没有被二次打包你无法验证。第二捆绑风险。部分站点会在安装包里塞推广组件或改写安装逻辑装完浏览器之后系统里多出几个“全家桶”是很常见的事。第三版本陈旧。很多归档站更新到某一年就不再维护了找新版本还得回官方接口。我自己的习惯是这样的优先官方接口取版本号优先官方下载节点取文件官方节点已经没有旧文件时再去第三方站但下载后必须做两步校验——看文件数字签名是否有效以及安装包的 SHA256 是否与官方渠道记录的数值一致如果能找到对照。自建存档是团队级做法公司内部搭一个共享目录把经校验的历史安装包按版本号归档之后新同事做兼容测试时不用再全网找直接内网取。这属于一劳永逸的投入建议测试团队或经常要处置老系统兼容问题的部门做一次。为方便决策下面是一个简短的渠道对比渠道可信度版本覆盖典型风险适合场景官方版本历史接口 官方下载节点高近期版本齐全较老版本文件可能下架接口返回英文数据需自己解析开发、测试、企业部署的默认首选第三方归档站中覆盖年份范围大老版本相对齐全二次打包、捆绑安装、签名损坏官方文件已下架时的备选下载后必须校验团队内网自建存档高取决于内部维护范围需人工维护版本滞后反复用同一批旧版本的团队3. 用脚本直接命中指定版本命令行下载的完整流程3.1 先读懂版本号四位段号与你的真实诉求怎么对应Chrome 版本号是典型的四段主版本格式比如116.0.5845.188。这四段分别是大版本号、分支基准号、构建号、补丁号。对大多数场景来说你只需要关注第一段也就是“大版本”。但真正下载的时候接口返回的是完整四段号你要找的是“这个大版本号里官方发布的最后一个或某一个具体小版本”。常见的一个误区是把大版本号当成完整版本来下载。比如你说“我要 120 版本”实际在接口里 120 这个大版本对应着好几个小版本120.0.xxxx.xx这种它们之间还有 bug 修复差异。是否需要指定到小版本取决于你的场景。如果是复现用户报的 bug用户会给你完整的“关于”页面显示的版本号那就必须精确到四位段如果只是要一个“大版本区间”选该大版本中最新的小版本就行。用接口确认小版本列表的方法也很直白请求对应平台和渠道的 versions 接口然后在返回数组里筛出你要的大版本段取发布时间最新的那一条。这一步用任何语言写都行但命令行里最顺手的是curl加 JSON 解析工具。你不需要装额外的软件curl是大多数系统自带的JSON 解析可以用python3一段脚本完成。这个“先查后下载”的顺序很重要。很多人图省事直接拿网上搜到的下载链接开下结果文件名是旧版的、下回来装完版本不对。用接口先确认版本号再拼下载地址问题就能从根上避免。3.2 最小化 bash 脚本按平台与渠道拉取对应安装包我平时在 Linux 或 macOS 终端里会直接跑一段 bash 脚本完成“查询最新小版本号 拼接官方下载地址 下载”的整条链路。下面这个脚本可以照抄参数只有三个平台、渠道、大版本号。#!/usr/bin/env bash # 用法: ./fetch-chrome.sh [win|mac|linux] [stable|beta|dev|canary] [大版本号] set -euo pipefail PLATFORM${1:-win} # 平台win / mac / linux CHANNEL${2:-stable} # 渠道stable / beta / dev / canary MAJOR_VERSION${3:-116} # 目标大版本号 # 1. 拿到该平台该渠道的全部版本列表 VERSIONS_JSON$(curl -s https://versionhistory.googleapis.com/v1/chrome/platforms/${PLATFORM}/channels/${CHANNEL}/versions) # 2. 用 python3 解析筛出目标大版本下最新的一条完整版本号 FULL_VERSION$(echo $VERSIONS_JSON | python3 -c import json, sys data json.load(sys.stdin) major int(${MAJOR_VERSION}) picked None for item in data.get(versions, []): v item.get(version, ) try: if int(v.split(.)[0]) major: picked v break except ValueError: continue print(picked if picked else ) ) if [ -z $FULL_VERSION ]; then echo 未找到大版本 ${MAJOR_VERSION} 对应的版本请确认版本号或平台参数 exit 1 fi echo 命中版本: ${FULL_VERSION} # 3. 按官方下载节点规则拼接直链 # 注意不同平台的路径段不同下面按平台做分支 case $PLATFORM in win) URLhttps://dl.google.com/chrome/install/${FULL_VERSION}/chrome_installer.exe ;; mac) URLhttps://dl.google.com/chrome/install/${FULL_VERSION}/GoogleChrome.dmg ;; linux) URLhttps://dl.google.com/chrome/install/${FULL_VERSION}/google-chrome-stable_current_amd64.deb ;; esac echo 下载地址: ${URL} curl -L -o chrome-${FULL_VERSION}.${PLATFORM} $URL脚本逻辑上做了三件事先请求官方版本历史接口拿全量列表再过滤出你要的大版本号并取最新一条完整版本号最后按平台拼出官方下载节点的直链并用curl拉下来。参数设计上平台和渠道都给了默认值命令行的习惯是默认参数尽量可用只把“大版本号”作为必填语义暴露出来。你把它改成 Windows 上跑的话curl用 Git Bash 或 WSL 里的即可Windows 自带的certutil也可以下载但脚本可读性还是curl最好。需要注意两点。第一接口返回的列表顺序不是绝对稳定脚本里取的是“第一个匹配到大版本的条目”这是按官方“新版本排前面”的惯例写的。如果哪天返回顺序变了可以把逻辑改成按release_time字段排序再取最新。第二Linux 的 deb 包路径带stable字样是因为官方对 Linux 的 Stable 渠道安装包就是这样命名的如果你在跑beta或dev需要把包名里的stable换成对应渠道名否则 404。3.3 进阶用 Python 脚本一次性拉取多个版本并记录元信息做兼容性测试的时候往往不是一个版本够用的。你可能需要连续跑 116、117、118 三个大版本每个版本都要下载安装并跑一遍回归用例。这时逐个跑 bash 脚本有点低效我会写一个只依赖标准库的 Python 脚本把“查询版本号”和“下载文件”合并成一个循环最后把结果写进一个 CSV 文件留档。#!/usr/bin/env python3 import csv import json import subprocess import sys import urllib.request def fetch_versions(platform: str, channel: str) - dict: url ( https://versionhistory.googleapis.com/v1/chrome/ fplatforms/{platform}/channels/{channel}/versions ) with urllib.request.urlopen(url) as resp: return json.load(resp) def find_latest_for_major(versions: dict, major: int) - str: for item in versions.get(versions, []): v item.get(version, ) try: if int(v.split(.)[0]) major: return v except ValueError: continue return def build_url(platform: str, full_version: str) - str: if platform win: return fhttps://dl.google.com/chrome/install/{full_version}/chrome_installer.exe if platform mac: return fhttps://dl.google.com/chrome/install/{full_version}/GoogleChrome.dmg if platform linux: return ( fhttps://dl.google.com/chrome/install/{full_version}/ google-chrome-stable_current_amd64.deb ) raise ValueError(funsupported platform: {platform}) def main() - None: platform sys.argv[1] if len(sys.argv) 1 else win channel sys.argv[2] if len(sys.argv) 2 else stable majors [int(x) for x in sys.argv[3:]] or [116, 117, 118] versions_data fetch_versions(platform, channel) records [] for major in majors: full_version find_latest_for_major(versions_data, major) if not full_version: print(fmajor {major}: not found, filesys.stderr) continue url build_url(platform, full_version) output_name fchrome-{full_version}.{platform} print(fdownloading {full_version} - {output_name}) subprocess.run([curl, -L, -o, output_name, url], checkTrue) records.append({ major: major, full_version: full_version, url: url, local_file: output_name, }) with open(chrome-downloads.csv, w, newline) as f: writer csv.DictWriter(f, fieldnames[major, full_version, url, local_file]) writer.writeheader() writer.writerows(records) print(done, saved to chrome-downloads.csv) if __name__ __main__: main()逻辑上这个脚本有两个设计点值得说明。第一个是“BS 式容错”如果某个大版本号在接口里查不到比如输错了数字或老版本被官方下架脚本不会中断整批流程只会把错误打到标准错误输出继续处理下一个版本。第二个是把下载记录写成 CSV这在你后续做回归测试时非常有用——哪个版本对应哪个本地文件名、URL 是什么全都留了底不用靠脑袋记。subprocess.run调curl而不是直接用urllib下载是刻意为之curl对重定向、断点续传和 TLS 证书链的处理比标准库更稳在脚本语言里作为一个外部调用是常见做法。如果你在 Windows 上跑这个 Python 脚本需要确保curl在 PATH 里否则会报FileNotFoundError。3.4 下载失败时先看三处返回码、文件名、文件大小脚本下载不比人工点击失败时信息是直接露出来的。最典型的三类异常排障路径几乎固定。第一类是 HTTP 404原因通常是拼接的下载路径不存在。官方下载节点对老版本的保留是有时间窗口的我在 2023 年还见过 110 大版本的安装包能下载但更早就已经 404。遇到这种情况不要反复试官方路径直接转第三方校验后拉取或者调整目标版本号到官方仍保留的范围内。第二类是下载下来的文件很小只有几十 KB。这往往不是真的安装包而是下载节点返回的一个错误页或提示页。curl默认不会因为这种情况爆错只有你检查文件大小或文件头才能发现问题。所以脚本里如果加上“下载后检查文件大于 20MB”的判断会更稳Windows 的离线安装包通常上百 MB。第三类是证书校验失败。curl会报SSL certificate problem原因可能是系统 CA 证书过期也可能是当前网络环境对 HTTPS 连接做了改写。常规解决手段是更新系统证书库不要直接加-k跳过校验——那是把安全防线拆了下载一个浏览器却跳过证书校验怎么想都划不来。4. 下载Chrome历史版本避坑从翻车现场整理的 5 条清单4.1 现象装完确实是旧版过几天又自己变回新版我遇到过某公司测试环境里A 工程师花了一下午下载安装好 116 版本第三天再开浏览器发现又变回最新版了。原因几乎可以断定Chrome 自带的自动更新服务默认是开着的旧版装好后更新服务会在后台检测并拉取新版本安装包本身无法阻止这个过程。解决方法是装完立刻处理更新通道。Windows 上可以禁用 Google Update 服务服务名形如gupdate和gupdatem或者通过组策略配置自动更新策略让浏览器保持在一个固定版本。个人开发者图省事的话装完后把安装目录改名或者把更新程序重命名也能临时挡一阵子但这不是正规做法系统重启后更新服务可能自我修复。测试机建议直接用一个脚本在安装后统一停止相关服务。4.2 现象从第三方站下载的安装包双击后报证书无效或被系统拦截有一次我在一个第三方归档站下载 Chrome 118 的 Windows 安装包下载倒是顺利安装时系统直接弹“无法验证发布者”。原因就是文件被重新打包过数字签名已经失效。这类文件即便侥幸装上里面被塞了什么组件你也无从得知。解决方法是回到官方节点下载并养成校验签名的习惯。Windows 上右键安装包看“数字签名”页签确认签名有效和签名主体信息完整macOS 上用spctl --assess验证 Gatekeeper 评估结果。第三方站不是完全不能用而是用了之后必须做这两步检查缺一步都不建议装机。4.3 现象覆盖安装旧版时报错“已安装更高版本”旧版装不上来Chrome 的安装器不允许在同一目录下用旧版本覆盖新版本。某同事在复现老 bug 时想直接把 116 盖在 120 上安装器直接退出了。这是设计如此不是下载的包有问题。解决方法是先卸载当前版本再安装旧版。更稳妥的做法是备份用户数据目录再卸载因为 Chrome 的配置文件书签、密码、历史记录默认跟随用户目录卸载浏览器不会删配置但为了保险还是手动复制一份。如果你要并行保留多个版本做回归测试不要用覆盖安装的思路应该用独立目录的方式跑旧版这个技巧最后章会展开。4.4 现象明明下了 Windows 的包安装界面却跑到另一个体系去了这个坑更多发生在 Windows 平台内部的细分场景。Chrome 的 Windows 安装包有在线安装器和离线完整安装包之分还有 32 位和 64 位差异。官方下载节点路径里如果没明确区分很容易在搜索结果里下到在线安装器——它的体积只有 1~2MB运行后才开始拉取完整文件。你以为下载了历史版本的安装包结果运行后拉回来的又是当前最新版等于白忙。解决方法是下载后先看文件大小。离线完整安装包体积在 100MB 量级在线安装器则极小。如果你用接口拼 URL优先确认路径段里带完整版本号的那一类那通常是直链离线包。另外 Windows 平台上安装器有两种体系系统级安装与用户级安装部分企业环境使用系统级安装包这个体系差异也会影响覆盖逻辑遇到问题先确认你拿到的安装包属于哪一种。4.5 现象macOS 下载完成后提示“镜像已损坏”但我校验了 SHA 是对的macOS 对下载文件的隔离属性很敏感。浏览器下载的文件默认带com.apple.quarantine属性如果系统认为文件来源不明会拒绝打开或提示“已损坏”。这不一定意味着文件被篡改有时只是隔离属性和应用签名之间的校验流程被触发。解决方法是先跑xattr -dr com.apple.quarantine /path/to/file.dmg清除隔离属性后再打开。如果清除后仍然提示签名无效说明文件本身真的有问题回去检查下载来源。这一条能帮你区分“系统误报”和“文件确实被改过”避免在错误的方向上反复折腾。提示以上操作都是在正常下载和安装软件的范畴内不会触及任何系统安全限制的绕过。5. 把版本“锁死”并验证安装与日常使用的落地技巧5.1 多版本并存用独立 user-data-dir 让旧版和现有浏览器互不干扰如果你需要同时保留新版和旧版不要玩覆盖安装。Chrome 支持通过启动参数指定独立的用户数据目录两个实例可以并行存在。以 Windows 为例下载并解压或安装好旧版后用下面的方式启动它能避免与你日常用的 Chrome 打架。chrome.exe --user-data-dirD:\chrome_profiles\v116 --disable-auto-update这个参数的含义是所有书签、扩展、登录态都写到D:\chrome_profiles\v116下与默认配置隔离--disable-auto-update是禁用更新检查注意这个参数在新版本中的支持程度有变化要确认当前版本是否响应它。配合前面改更新服务的操作旧版本就能长期留在一个固定状态不会因为重新启动而被悄悄换掉。macOS 和 Linux 同理--user-data-dir参数通用路径换成对应系统的写权限目录即可。这个技巧是我做兼容测试时最常用的一招一次配好多个 profile后续反复用。5.2 日常维护习惯把下载记录和校验值存进同一条文档版本下载这件事有个特点你很少只下载一次但隔几个月再要同一版本时全网资源可能已经变了。我自己的做法是建一个内部表格列名固定为日期、版本号、平台、渠道、来源 URL、本地文件名、SHA256、签名校验结果。每次下载完成就顺手记录下次要用直接查表。校验 SHA256 的命令在 Windows 上是certutil -hashfile file SHA256在 macOS 和 Linux 上是shasum -a 256 file。不要只看文件能装就入库记下校验值之后任何人拿到这个文件都能从你的记录里验证它有没有被动过。这比“我上次下载的时候是好的”这种经验主义靠谱得多。5.3 一套可复用的验证流程新下载的版本我会按这个顺序验证先核对版本号是否与接口返回一致再验证数字签名最后确认文件大小在合理区间。全部通过才执行安装。安装后打开浏览器进“关于”页面确认显示版本和命令行拉取的一致这一步不能省——有几次我全程没发现问题装完才发现下载的是另一个渠道的包。最后说句实在话。做这件事这么久我最大的教训是永远别把“我第一次下载能用”当作可信结论特别是在给测试环境或生产基线部署浏览器时。版本、来源、校验值三样东西缺一样都别进你的库。希望这篇文章能让你少走几次弯路祝顺利。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑