☰
Selenium Grid 4.35.0 Chrome 113 镜像标签全解析:tag_and_push_browser_images.sh 的标签体系与固定版本实战
2026/10/9 4:49:56 网站建设 项目流程
  • 测试
  • 后端
  • 云原生
  • 容器编排
  • 可观测性

【免费下载链接】docker-selenium

Provides a simple way to run Selenium Grid with Chrome, Firefox, and Edge using Container Platform, making it easier to perform browser automation at scale

项目地址:https://gitcode.com/GitHub_Trending/do/docker-selenium
点击查看免费下载

Selenium Grid 4.35.0 版本同时为 Chrome 113 发布了selenium/node-chrome与selenium/standalone-chrome共 12 个标签,本篇文章以 CHANGELOG/archived/4.35.0/chrome_113.md 这份归档变更记录为骨架,完整拆解每条标签的命名含义、背后脚本的版本探测与打标签流程,并结合仓库内的 Dockerfile、Makefile 与 docker-compose 配置给出"如何固定浏览器版本跑测试"的可复制方案。读完你将能读懂 Selenium Grid 浏览器镜像的整套 Tagging Convention,并能按需挑选最合适的标签拉取镜像。

这份 Changelog 记录了什么

归档在CHANGELOG/archived/下的chrome_113.md是一份构建产物级的发布日志:它不是人工撰写的说明,而是脚本 tag_and_push_browser_images.sh 的真实执行输出。原文如下(完整保留):

./tag_and_push_browser_images.sh 4.35.0 20250909 selenium false chrome true Tagging images for browser chrome, version 4.35.0, build date 20250909, namespace selenium Selenium Grid version -> 4.35.0-20250909 Chrome version -> 113.0.5672.126 Short Chrome version -> 113.0 ChromeDriver version -> 113.0.5672.63 Short ChromeDriver version -> 113.0 Tagged selenium/node-chrome:113.0.5672.126-chromedriver-113.0.5672.63-grid-4.35.0-20250909 Tagged selenium/standalone-chrome:113.0.5672.126-chromedriver-113.0.5672.63-grid-4.35.0-20250909 Tagged selenium/node-chrome:113.0.5672.126-chromedriver-113.0.5672.63-20250909 Tagged selenium/standalone-chrome:113.0.5672.126-chromedriver-113.0.5672.63-20250909 Tagged selenium/node-chrome:113.0.5672.126-20250909 Tagged selenium/standalone-chrome:113.0.5672.126-20250909 Tagged selenium/node-chrome:113.0-chromedriver-113.0-grid-4.35.0-20250909 Tagged selenium/standalone-chrome:113.0-chromedriver-113.0-grid-4.35.0-20250909 Tagged selenium/node-chrome:113.0-chromedriver-113.0-20250909 Tagged selenium/standalone-chrome:113.0-chromedriver-113.0-20250909 Tagged selenium/node-chrome:113.0-20250909 Tagged selenium/standalone-chrome:113.0-20250909

从这段输出可以提炼出四个关键事实:

  1. 镜像组合:每次发布同时为 Node(加入 Grid 的浏览器节点)与 Standalone(内置完整 Grid 的独立容器)两个镜像形态打标签;
  2. 版本三元组:Selenium Grid4.35.0-20250909、Chrome113.0.5672.126、ChromeDriver113.0.5672.63;
  3. 长短两种精度:Chrome/ChromeDriver 同时保留主.次.修订的完整版本号与主.次的短版本号(由 short_version 函数 截取前两段得到);
  4. 发布方式:本次为RELEASE_OLD_VERSION=true(最后一个参数true),因此只打带日期后缀的 6 类标签,未追加不带日期的旧式标签。

入口脚本:参数与执行流程

所有浏览器镜像标签都由 tag_and_push_browser_images.sh 统一生成,Makefile 通过 tag_and_push_chrome_images 等目标间接调用它:

tag_and_push_chrome_images: ./tag_and_push_browser_images.sh $(VERSION) $(BUILD_DATE) $(NAMESPACE) $(PUSH_IMAGE) chrome $(RELEASE_OLD_VERSION)

脚本共接收 7 个位置参数,其中后 3 个有默认值:

位置变量含义本次调用值
$1VERSIONSelenium Grid 版本号4.35.0
$2BUILD_DATE构建日期(YYYYMMDD)20250909
$3NAMESPACE镜像命名空间,默认seleniumselenium
$4PUSH_IMAGE是否docker push,默认falsefalse
$5BROWSER浏览器分支:chrome / chromium / edge / firefox / chrome-for-testingchrome
$6RELEASE_OLD_VERSION是否追加无日期旧式标签,默认falsetrue
$7PLATFORM探测版本时指定的平台,默认linux/amd64未传,用默认值

脚本执行分为两大阶段。

阶段一:从已构建镜像内探测真实版本

打标签前,脚本会以--platform指定的架构临时运行刚构建的selenium/node-chrome:4.35.0-20250909,用容器内二进制自身输出版本号(tag_and_push_browser_images.sh#L63-L73):

CHROME_VERSION=$(docker run --platform ${PLATFORM} --rm ${NAMESPACE}/node-chrome:${TAG_VERSION} google-chrome --version | awk '{print $3}') CHROMEDRIVER_VERSION=$(docker run --platform ${PLATFORM} --rm ${NAMESPACE}/node-chrome:${TAG_VERSION} chromedriver --version | awk '{print $2}')
  • google-chrome --version输出Google Chrome 113.0.5672.126,取第 3 列得到113.0.5672.126;
  • chromedriver --version输出ChromeDriver 113.0.5672.63 ...,取第 2 列得到113.0.5672.63;
  • 随后 short_version 按.切分取前两段,得到113.0作为短版本。

版本号来自容器内实际二进制而非外部假设,保证了标签与镜像内容严格一致。这一点与 NodeChrome/Dockerfile 中把google-chrome --version探测结果写入/opt/selenium/browsers/chrome/version的机制同源:标签、浏览器元数据、运行时探测三者指向同一份事实。

阶段二:按模板生成标签并执行 retag

retag()(tag_and_push_browser_images.sh#L31-L51)负责实际打标签:默认执行docker tag(本地别名),仅在PUSH_IMAGE=true时追加docker push;若启用PROMOTE_TAGS=true,则改为用docker buildx imagetools create在 registry 间直接复制 manifest,从而保留多架构索引。

标签命名规则解码

本次 changelog 的 12 行输出,本质是 6 种模板 × 2 个镜像。以完整版本号为例,一条标签被-分隔为最多 4 个语义段:

113.0.5672.126 - chromedriver-113.0.5672.63 - grid-4.35.0-20250909 │ 浏览器版本 │ 浏览器驱动版本 │ Grid 版本-构建日期
模板(长版本)模板(短版本)语义粒度
{Chrome}-chromedriver-{Driver}-grid-{Grid}-{Date}113.0-chromedriver-113.0-grid-4.35.0-20250909浏览器 + 驱动 + Grid + 日期,信息最全
{Chrome}-chromedriver-{Driver}-{Date}113.0-chromedriver-113.0-20250909浏览器 + 驱动 + 日期
{Chrome}-{Date}113.0-20250909仅浏览器 + 日期

长短版本各对应 3 类,共 6 类。脚本把这 6 类定义为基础标签(tag_and_push_browser_images.sh#L75-L87),并对node-chrome与standalone-chrome各打一遍,于是产出 12 条Tagged日志。

RELEASE_OLD_VERSION 开关:追加 4 个"无日期"旧式标签

当RELEASE_OLD_VERSION=false(新版本发布时的默认行为)时,脚本还会额外追加 4 个不带构建日期的标签(tag_and_push_browser_images.sh#L88-L99),保持与历史版本标签体系兼容:

  • {Chrome}-chromedriver-{Driver}
  • {Chrome}
  • {ChromeShort}-chromedriver-{DriverShort}
  • {ChromeShort}

本次 changelog 调用传入的是true,因此输出中只出现带grid-或日期后缀的标签——这也解释了为何归档里恰好是 12 行而非 20 行。docs 目录下的 Standalone Chrome 文档 以<Major>.<Minor>.<Patch>、<Major>.<Minor>等形式列出了同一套约定,可交叉印证。

实战:用固定标签拉起 Chrome 113 测试环境

场景一:Standalone 独立跑测试

不依赖 Hub,直接运行一个自带 Grid 的 Chrome 容器。以下命令把固定版本标签替换进官方推荐的运行方式(docs/docker-hub/standalone-chrome.md):

docker run -d -p 4444:4444 -p 7900:7900 --shm-size="2g" \ selenium/standalone-chrome:113.0.5672.126-chromedriver-113.0.5672.63-grid-4.35.0-20250909

随后把 WebDriver 测试指向http://localhost:4444即可。需要观察容器内浏览器行为时,访问http://localhost:7900/?autoconnect=1&resize=scale&password=secret的 noVNC 页面。官方文档特别强调:凡是包含浏览器的镜像,docker run务必带--shm-size=2g,否则浏览器进程可能因/dev/shm空间不足而崩溃。

场景二:作为 Node 加入完整 Grid

在 docker-compose-v3.yml 中,Chrome 节点通过SE_EVENT_BUS_HOST连接到selenium-hub。把image替换为本 changelog 中的固定标签即可实现版本锁定:

services: chrome: image: selenium/node-chrome:113.0.5672.126-chromedriver-113.0.5672.63-grid-4.35.0-20250909 platform: linux/amd64 shm_size: 2gb depends_on: - selenium-hub environment: - SE_EVENT_BUS_HOST=selenium-hub selenium-hub: image: selenium/hub:4.35.0-20250909 container_name: selenium-hub ports: - "4442:4442" - "4443:4443" - "4444:4444"

启动命令为docker compose -f docker-compose-v3.yml up -d,测试请求统一发往 Hub 的4444端口,由 Router/Distributor 把会话调度到 Chrome 节点上。

如何挑选标签

  • 追求可复现:选含grid-的完整标签(浏览器 + 驱动 + Grid + 日期全锁定),例如113.0.5672.126-chromedriver-113.0.5672.63-grid-4.35.0-20250909;
  • 只关心浏览器版本:113.0.5672.126-20250909或113.0-20250909;
  • 日常开发:官方仍推荐latest简化使用,但文档明确建议用完整标签固定浏览器与 Grid 版本,避免上游升级带来的不确定性。

从 Changelog 到版本矩阵:归档机制的源码印证

这份chrome_113.md并非孤立文件,它是整个"版本矩阵"体系的叶子节点。仓库根目录的 CHANGELOG/README.md 用一张"Grid 版本 × 浏览器版本"矩阵展示所有可用镜像,其中4.35.0行的 Chrome 列就链接到本文件(归档路径archived/4.35.0/chrome_113.md)。该 README 由 CHANGELOG/generate-matrix-readme.py 自动生成,其维护流程包含三个步骤(generate-matrix-readme.py#L189-L208):

  1. 归档:archive_old_versions()将除最新版外的 Grid 版本目录整体移入archived/(generate-matrix-readme.py#L8-L42);
  2. 扫描:scan_changelog()用正则([\w-]+)_(\d+)\.md解析每个目录下的chrome_113.md这类文件名,得到(grid_version, browser, version)三元组;
  3. 生成:按浏览器分组渲染矩阵表,最新版本在前、归档版本在后,每个 ✓ 指向对应 changelog 文件。

整个链路(发布脚本打标签 → 变更日志落盘 → 矩阵 README 汇总 → 归档)在仓库中闭环,Makefile 的 update_browser_versions_matrix 目标即是上述生成流程的自动化入口。

注意事项:版本组合的测试边界

矩阵 README 的官方说明明确两点,使用时应作为前提:

  • 该矩阵旨在"用最新 Grid 核心 + 用户可自由钉住的浏览器版本"支撑跨浏览器测试、或因特定浏览器版本的兼容问题而锁版(CHANGELOG/README.md#L5);
  • 并非每种 Grid × 浏览器组合都经过完整测试,项目方不保证任意组合完全可用,用户需要依据自身测试需求评估并自行决策(CHANGELOG/README.md#L9)。

这也正是"固定标签"的实用价值所在:当某个浏览器版本出现兼容性回归或团队尚未完成升级适配时,通过113.0.5672.126-chromedriver-113.0.5672.63-grid-4.35.0-20250909这类精确标签,可以在一行命令内把测试环境锁定在已知版本组合上,同时继续享受新 Grid 版本的功能更新。

  • 测试
  • 后端
  • 云原生
  • 容器编排
  • 可观测性

【免费下载链接】docker-selenium

Provides a simple way to run Selenium Grid with Chrome, Firefox, and Edge using Container Platform, making it easier to perform browser automation at scale

项目地址:https://gitcode.com/GitHub_Trending/do/docker-selenium
点击查看免费下载

相关推荐

上一篇:解决直播断流难题:KPlayer-go智能重连机制与错误处理策略
下一篇:Dillinger 数据库迁移指南:零停机 Schema 变更策略与 Serverless 数据库选型实战

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询