news 2026/10/4 1:53:02

Selenium Grid 4.48.0 与 Firefox 99 镜像发布全解析:读懂 docker-selenium 的浏览器版本标签体系

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Selenium Grid 4.48.0 与 Firefox 99 镜像发布全解析:读懂 docker-selenium 的浏览器版本标签体系
  • 测试
  • 后端
  • 云原生
  • 容器编排
  • 可观测性

【免费下载链接】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 的 docker-selenium 项目为每个 Grid 版本同时发布多套浏览器镜像,而 CHANGELOG/4.48.0/firefox_99.md 正是 Firefox 99.0.1 随 Grid 4.48.0 发布时的完整打标签记录。本文以这份变更日志为骨架,结合 tag_and_push_browser_images.sh、NodeFirefox/Dockerfile 与 docs/docker-hub/node-firefox.md 等仓库源码,逐行拆解镜像打标签命令的每个参数、版本探测机制、标签命名规范及其底层实现。读完你将能读懂任何一份浏览器变更日志,并掌握如何在生产环境中精确选取和验证对应的 Firefox 镜像标签。

这份变更日志记录了什么

firefox_99.md全文是一段发布脚本的标准输出,记录了一次针对Firefox 99.0.1的镜像打标签过程。核心事实包括:

  • 目标 Grid 版本:4.48.0,构建日期20260909,即完整 Grid 标签4.48.0-20260909;
  • 浏览器版本:Firefox 99.0.1(短版本99.0);
  • 驱动版本:GeckoDriver 0.37.1(短版本0.37);
  • 涉及镜像:selenium/node-firefox与selenium/standalone-firefox两套镜像,共打出 12 个标签(6 种标签 × 2 个镜像)。

在 CHANGELOG/README.md 的 "Selenium Grid x Browser Version Matrix" 矩阵中,Grid 4.48.0 行、Firefox 99 列上的 ✓ 即链接到这份文档。该矩阵的存在动机正如其 README 所述:既要跟进最新 Grid 核心版本,又要保留按浏览器版本精确锁定镜像的能力——用户找到标签、拉取镜像、直接开始测试。

打标签命令逐参数拆解

变更日志第一行是完整调用:

./tag_and_push_browser_images.sh 4.48.0 20260909 selenium false firefox true

对照 tag_and_push_browser_images.sh 开头的参数定义,这 6 个位置参数的含义分别是:

位置值脚本变量含义
$14.48.0VERSIONSelenium Grid 版本
$220260909BUILD_DATE构建日期,与 VERSION 拼接为TAG_VERSION=4.48.0-20260909
$3seleniumNAMESPACE镜像命名空间(Docker Hub 账号)
$4falsePUSH_IMAGE是否同时推送镜像,本次仅本地打标签
$5firefoxBROWSER浏览器类型,进入case分支分发
$6trueRELEASE_OLD_VERSION是否为旧版本浏览器执行发布,直接影响标签集合

脚本随后打印Tagging images for browser firefox, version 4.48.0, build date 20260909, namespace selenium,与日志第二行完全吻合。在生产环境,这套调用也可以经由 Makefile 的tag_and_push_firefox_images目标间接触发,其默认参数由 Makefile 顶部变量提供(PUSH_IMAGE=false、RELEASE_OLD_VERSION=false),并通过tag_and_push_browser_images聚合目标统一编排。

版本探测:版本号从哪里来

日志的第三到第八行是版本探测输出,其逻辑位于脚本的 firefox 分支(tag_and_push_browser_images.sh):

FIREFOX_VERSION=$(docker run --rm ${NAMESPACE}/node-firefox:${TAG_VERSION} firefox --version | awk '{print $3}') GECKODRIVER_VERSION=$(docker run --rm ${NAMESPACE}/node-firefox:${TAG_VERSION} geckodriver --version | awk 'NR==1{print $2}')

即:临时启动刚构建好的node-firefox:4.48.0-20260909镜像,在容器内执行firefox --version与geckodriver --version,再用 awk 截取版本字段。这是"以镜像内部实际软件版本为准"的探测方式,而不是信任构建参数,保证标签与实际二进制完全一致——这正是日志中Firefox version -> 99.0.1、GeckoDriver version -> 0.37.1的来源。

随后调用short_version()(tag_and_push_browser_images.sh)取前两段:

99.0.1 -> 99.0 0.37.1 -> 0.37

短版本用于生成简化标签。Chrome 分支还额外支持--platform参数指定探测架构(chrome 分支通过docker run --platform ${PLATFORM}),而 firefox 分支未使用该参数,说明其版本探测不区分平台。

六种标签与两套镜像的完整矩阵

日志第 9-20 行共 12 个Tagged输出。retag()函数(tag_and_push_browser_images.sh)会对node-firefox和standalone-firefox各执行一次打标签,因此 6 种标签 × 2 个镜像 = 12 行。6 种标签模式如下:

序号标签模式示例(node-firefox)
1浏览器完整版-驱动完整版-grid-完整Grid标签99.0.1-geckodriver-0.37.1-grid-4.48.0-20260909
2浏览器完整版-驱动完整版-构建日期99.0.1-geckodriver-0.37.1-20260909
3浏览器完整版-构建日期99.0.1-20260909
4浏览器短版-驱动短版-grid-完整Grid标签99.0-geckodriver-0.37-grid-4.48.0-20260909
5浏览器短版-驱动短版-构建日期99.0-geckodriver-0.37-20260909
6浏览器短版-构建日期99.0-20260909

这与 docs/docker-hub/node-firefox.md 中"如何选择正确标签"一节描述的约定完全一致:selenium/node-firefox-<browserVersion>-<browserDriver>-<browserDriverVersion>-<Major>.<Minor>.<Patch>-<YYYYMMDD>及其全部排列组合。

注意:日志只有 6 种标签而不是脚本注释里暗示的全部 10 种。原因在于第 6 个参数RELEASE_OLD_VERSION=true——当它为false时,脚本才会额外追加 4 个不带构建日期的通用标签(99.0.1-geckodriver-0.37.1、99.0.1、99.0-geckodriver-0.37、99.0)。本次对 Firefox 99 这一较旧浏览器版本执行发布时该参数为true,因此跳过了这 4 个通用标签,避免旧版本浏览器以通用标签形式长期驻留。

底层实现:Firefox 99 与 GeckoDriver 0.37.1 如何进入镜像

标签背后的版本由 NodeFirefox/Dockerfile 的构建逻辑决定,它也是tag_and_push_browser_images.sh所探测镜像的构建来源:

Firefox 安装(NodeFirefox/Dockerfile):构建参数FIREFOX_VERSION决定安装方式。对于 99 这种小于 136 的版本,会走 package 下载路径,由 install-firefox-package.sh 从 Mozilla 官方 CDN 下载.deb或.tar.bz2包并解压到/opt/firefox-99.0.1,同时ln -fs建立/usr/bin/firefox软链接。镜像内还会执行:

firefox --version | awk '{print $3}' > /opt/selenium/browsers/firefox/version

这正是探测脚本所用命令的同一来源,保证构建期写入的版本信息与运行期--version输出一致。

GeckoDriver 安装(NodeFirefox/Dockerfile):默认GECKODRIVER_VERSION=latest时,先解析 mozilla/geckodriver 的最新 release 标签,再按架构下载对应 tar 包,最终通过软链接固定到/usr/bin/geckodriver。GeckoDriver 0.37.1 即 4.48.0 发布时解析到的版本。

运行期使用:Node 启动脚本 start-selenium-node.sh 在启动 Grid Node 时会显式注入-Dwebdriver.gecko.driver=/usr/bin/geckodriver,确保 WebDriver 会话使用镜像内固定的 GeckoDriver 路径;NodeFirefox/Dockerfile 还写入了{"moz:firefoxOptions": {"binary": ...}}到/opt/selenium/browsers/firefox/binary_location,供 Grid 自动生成 Node 配置时引用。

如何拉取和使用这些标签

以日志第 9 行为例,若需要"Firefox 99.0.1 + GeckoDriver 0.37.1 + Grid 4.48.0-20260909"这一最精确组合:

docker pull selenium/node-firefox:99.0.1-geckodriver-0.37.1-grid-4.48.0-20260909

若只想锁定浏览器大版本而接受驱动随之绑定,可使用短版本标签:

docker pull selenium/node-firefox:99.0-20260909

按 docs/docker-hub/node-firefox.md 的指引,Node 镜像需与 Hub 在同一 Docker 网络内协作:

docker network create grid docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:latest docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub --shm-size="2g" \ selenium/node-firefox:99.0-geckodriver-0.37-grid-4.48.0-20260909

测试代码指向http://localhost:4444即可(可选地通过http://localhost:7900/?autoconnect=1&resize=scale&password=secret观察容器内画面)。注意:运行含浏览器的镜像务必加--shm-size=2g,使用宿主共享内存避免浏览器崩溃。使用后清理网络:docker network rm grid。文档同时建议使用完整标签固定浏览器与 Grid 版本,而非latest。

版本矩阵的生成与归档机制

这类变更日志并非手写,而是由 CHANGELOG/generate-matrix-readme.py 驱动。它按\d+\.\d+\.\d+识别版本目录、扫描每个浏览器_版本.md文件(re.match(r'([\w-]+)_(\d+)\.md')),自动生成 CHANGELOG/README.md 中的矩阵表;旧 Grid 版本目录会被移入archived/,仅保留最新版本在前台。因此,firefox_99.md既是一次发布的机器可读记录,也是矩阵表中 Firefox 99 一列的唯一权威链接目标,保证了"版本矩阵 → 变更日志 → 镜像标签"三者之间的可追溯闭环。

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

【免费下载链接】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
点击查看免费下载

相关推荐

上一篇:kitty-scrollback.nvim与其他终端插件的对比分析:为什么选择这个Ameowzing工具
下一篇:opencode 开发规范深度解读:AGENTS.md 如何约束 SDK 生成、依赖分层与 V2 会话核心

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/4 1:51:51

告别位置偏差:MingLi-Bench 无固定点选项打乱算法原理深析

告别位置偏差&#xff1a;MingLi-Bench 无固定点选项打乱算法原理深析 【免费下载链接】MingLi-Bench A benchmark for evaluating LLMs on Chinese traditional fortune telling — Bazi (八字) and Ziwei Doushu (紫微斗数). 项目地址: https://gitcode.com/gh_mirrors/mi/…

作者头像 李华
网站建设 2026/10/4 1:50:07

SVPWM工程实践:PI双闭环解耦下的调制链路优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华