强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

Chromium / ChromeDriver 完全指南 / 01 - Chromium / ChromeDriver 概述

01 - Chromium / ChromeDriver 概述

理解 Chromium 与 Chrome 的本质区别,掌握 ChromeDriver 的定位,建立浏览器自动化技术栈的全局视野。


1.1 什么是 Chromium

Chromium 是 Google 主导的开源浏览器项目,是 Chrome 浏览器的上游代码库。所有 Chrome 的核心功能都先在 Chromium 中实现,再经 Google 打包、添加私有组件后发布为 Chrome。

┌─────────────────────────────────────────────────┐
│                  Google Chrome                   │
│  ┌────────────────────────────────────────────┐  │
│  │              Chromium 内核                  │  │
│  │  Blink (渲染引擎) + V8 (JS 引擎)            │  │
│  │  + 网络栈 + 安全沙箱                        │  │
│  └────────────────────────────────────────────┘  │
│  + 私有编解码器 (AAC, H.264)                     │
│  + Chrome Web Store 集成                         │
│  + 自动更新 (Google Update)                      │
│  + Crash 报告                                    │
│  + PDF 阅读器                                    │
│  + 安全浏览数据库                                 │
└─────────────────────────────────────────────────┘

核心特征

特征说明
开源协议BSD / MIT / LGPL / Apache 2.0 等混合许可
渲染引擎Blink(从 WebKit 分叉而来)
JavaScript 引擎V8(JIT 编译,高性能)
进程模型多进程架构(Browser + Renderer + GPU + Plugin)
更新频率每 4 周一个大版本,安全补丁随时发布

1.2 Chromium vs Chrome

这是理解浏览器自动化的基础——你的自动化脚本控制的到底是哪个浏览器?

对比维度ChromiumChrome
开源✅ 完全开源❌ 闭源,基于 Chromium 构建
媒体编解码不含 AAC / H.264 专利编解码器内置完整编解码支持
PDF 查看器基础支持内置完整 PDF 阅读器
自动更新不含自动更新机制通过 Google Update 自动更新
Flash / DRM不含 Widevine CDM内置 Widevine DRM
遥测数据无 Google 遥测向 Google 发送使用数据
Crash 报告可选默认启用
扩展商店可手动安装 CRX直接访问 Chrome Web Store
发行渠道仅 Dev / Canary 渠道Stable / Beta / Dev / Canary
驱动支持ChromeDriver 均支持ChromeDriver 均支持

自动化场景下的选择建议

选择 Chromium:
  ✅ Docker / CI 环境(镜像更小,无需 GUI)
  ✅ 隐私敏感场景(无遥测)
  ✅ 定制化构建(可以裁剪功能)
  ✅ 嵌入式应用(Electron 等基于 Chromium)

选择 Chrome:
  ✅ 需要完整媒体播放能力
  ✅ 需要测试用户真实环境
  ✅ 需要 Chrome Web Store 扩展
  ✅ 需要 DRM 内容(Netflix 等)

1.3 什么是 ChromeDriver

ChromeDriver 是 Chrome/Chromium 的 WebDriver 协议实现,它是浏览器与自动化脚本之间的桥梁。

┌──────────────┐     WebDriver 协议 (HTTP/JSON)    ┌──────────────┐
│  自动化脚本   │ ────────────────────────────────→ │  ChromeDriver │
│  (Selenium)  │ ←──────────────────────────────── │  (HTTP Server)│
└──────────────┘          JSON 响应                 └──────┬───────┘
                                                    Chrome DevTools
                                                    ┌──────▼───────┐
                                                    │ Chrome/      │
                                                    │ Chromium     │
                                                    │ (浏览器进程)  │
                                                    └──────────────┘

工作原理

步骤说明
1. 启动Selenium 启动 ChromeDriver 进程,监听本地 HTTP 端口
2. 创建会话脚本发送 POST /session 请求,携带浏览器选项
3. 启动浏览器ChromeDriver 调用 Chrome/Chromium 并建立 DevTools 连接
4. 执行命令脚本发送 WebDriver 命令(点击、输入、导航等)
5. 转译执行ChromeDriver 将 WebDriver 命令转为 CDP(Chrome DevTools Protocol)指令
6. 返回结果ChromeDriver 将浏览器返回的结果封装为 JSON 响应

ChromeDriver 与 Chrome 的版本对应关系

这是最重要的知识点之一——版本必须匹配,否则会直接报错。

ChromeDriver 版本支持的 Chrome 版本
115+ (new endpoint)通过 Chrome for Testing 端点自动匹配
114 及以下主版本号必须一致(如 114.x 对应 114.x)
73-114主版本号一致,补丁号不需要完全匹配
Chrome 120.0.6099.109  ←→  ChromeDriver 120.0.6099.71  ✅ 主版本一致
Chrome 120.0.6099.109  ←→  ChromeDriver 119.0.6045.105 ❌ 版本不匹配
Chrome 115+            ←→  Chrome for Testing 自动下载  ✅ 推荐方案

注意: 从 Chrome 115 开始,Google 推出了 Chrome for Testing 端点,ChromeDriver 的分发方式发生了根本变化。旧的 chromedriver.storage.googleapis.com 端点在 115+ 后逐渐废弃。详见第 02 章。


1.4 浏览器自动化技术全景

浏览器自动化并非只有 Selenium 一种方案,不同技术的协议层和适用场景各有不同。

三大技术栈对比

对比维度SeleniumPuppeteerPlaywright
协议WebDriver (W3C)CDP (Chrome DevTools Protocol)CDP + 自有协议
浏览器支持Chrome, Firefox, Safari, EdgeChrome / Chromium 为主Chrome, Firefox, WebKit
语言Java, Python, C#, Ruby, JSJavaScript / TypeScriptJS, Python, Java, C#
维护方Selenium 社区 + W3CGoogle Chrome DevTools 团队Microsoft
学习曲线中等
生态成熟度最成熟成熟快速成长
自动等待需手动实现需手动实现内置自动等待
并行测试TestNG / JUnit 配合需额外框架内置 Test Runner
移动端Appium 扩展Puppeteer 移动模拟移动端模拟
适用场景企业级 E2E 测试Chrome 专项操作现代 E2E 测试

协议层次

┌──────────────────────────────────────────────────────────┐
│                       应用层                              │
│   Selenium WebDriver API / Puppeteer API / Playwright API│
├──────────────────────────────────────────────────────────┤
│                       协议层                              │
│   W3C WebDriver    │    Chrome DevTools Protocol (CDP)   │
│   (标准化 HTTP API) │    (WebSocket 双向通信)              │
├──────────────────────────────────────────────────────────┤
│                       浏览器层                            │
│   ChromeDriver ←→ Chrome    geckodriver ←→ Firefox       │
└──────────────────────────────────────────────────────────┘

1.5 适用场景

浏览器自动化的应用场景远不止"写爬虫"这么简单。

场景矩阵

场景推荐技术说明
E2E 测试Playwright / Selenium模拟真实用户操作,验证功能
网页爬虫Puppeteer / Playwright动态渲染页面、SPA 内容抓取
截图 / PDFPuppeteer / Playwright网页快照、报表生成
性能分析PuppeteerLighthouse 集成、Trace 抓取
广告验证Selenium / Puppeteer验证广告投放与展示
表单自动填写Selenium / Playwright批量注册、数据录入
监控告警Puppeteer / Playwright网站可用性检测、视觉回归
扩展测试Selenium (带扩展加载)浏览器扩展自动化测试
SEO 审计Puppeteer渲染后抓取、结构化数据验证
UI 回归测试Playwright截图对比、视觉差异检测

1.6 Chrome DevTools Protocol (CDP) 简介

CDP 是 Chromium 提供的底层调试协议,Puppeteer 和 Playwright 都深度依赖它。

CDP 能力域

域 (Domain)说明典型用途
Page页面生命周期导航、截图、PDF、JS 弹窗处理
DOM文档对象模型查询节点、修改 DOM
Network网络请求拦截请求、模拟弱网、监控流量
RuntimeJavaScript 执行执行 JS、获取返回值
Emulation设备模拟模拟地理位置、UserAgent、视口
Input输入事件模拟鼠标、键盘、触控
Performance性能指标收集 Metrics、Trace
Security安全状态HTTPS 证书信息
Browser浏览器控制创建/关闭页面、窗口管理
CDP 通信模型:

  客户端 (Puppeteer/Playwright)
       │  WebSocket 连接
       │  ws://127.0.0.1:9222/devtools/browser/xxxx
  Chrome/Chromium (启用 --remote-debugging-port)
       ├── 命令 (Command): 客户端 → 浏览器(请求操作)
       ├── 事件 (Event):   浏览器 → 客户端(通知变化)
       └── 结果 (Result):   浏览器 → 客户端(返回数据)

CDP vs WebDriver 协议

对比维度CDPWebDriver (W3C)
通信方式WebSocket(双向)HTTP(请求/响应)
标准化非标准(Chrome 专用)W3C 标准
浏览器支持仅 Chromium 系列所有主流浏览器
能力粒度极细(底层访问)中等(高层抽象)
事件驱动原生支持需轮询或 BIDI 扩展
调试能力完整(就是调试协议本身)有限

扩展阅读: Chrome DevTools Protocol 官方文档W3C WebDriver 规范


1.7 要点回顾

要点说明
Chromium 是开源项目Chrome 是 Chromium + 私有组件的产物
ChromeDriver 是桥梁将 WebDriver 命令翻译为 CDP 指令
版本必须匹配ChromeDriver 与 Chrome 主版本号必须一致
115+ 新分发方式使用 Chrome for Testing 端点自动匹配
三大技术栈Selenium(标准化)、Puppeteer(Chrome 专项)、Playwright(现代多浏览器)
CDP 是底层协议Puppeteer 和 Playwright 都建立在 CDP 之上

1.8 注意事项

⚠️ 版本匹配: ChromeDriver 和 Chrome 版本不匹配是最常见的错误,务必在脚本中加入版本检查逻辑。

⚠️ Chromium vs Chrome 行为差异: 少数网站可能检测到 Chromium 并做出不同响应(如 DRM 内容不可用)。

⚠️ CDP 非标准: CDP 是 Chrome 专用协议,如果需要跨浏览器支持,应优先选择 WebDriver 协议或 Playwright。

⚠️ 许可证差异: Chromium 使用混合开源许可,Chrome 添加了 Google 专有许可条款,商业项目需注意合规。


1.9 扩展阅读

资源链接
Chromium 项目https://www.chromium.org/
ChromeDriver 官方文档https://chromedriver.chromium.org/
Chrome for Testinghttps://googlechromelabs.github.io/chrome-for-testing/
CDP 协议规范https://chromedevtools.github.io/devtools-protocol/
W3C WebDriver 规范https://www.w3.org/TR/webdriver/
Selenium 官方文档https://www.selenium.dev/documentation/
Puppeteer 官方文档https://pptr.dev/
Playwright 官方文档https://playwright.dev/
Chrome 版本发布日志https://chromiumdash.appspot.com/releases