# Chrome DevTools 与 CDP 协议完全指南 > Chrome DevTools 开发者工具 + Chrome DevTools Protocol (CDP) 协议深度研究 > > 归档:2026-04-25 --- ## 📊 生态概览 | 项目 | Stars | 定位 | |------|-------|------| | **Puppeteer** | 94,185 | Google 官方 Node.js CDP 库 | | **Playwright** | 87,219 | 微软多浏览器自动化框架 | | **go-rod/rod** | 6,881 | Go 语言 CDP 驱动 | | **CDP 协议仓库** | 1,476 | 官方协议定义 | | **cdpnetool** | 336 | CDP 网络调试工具 | | **ichrome** | 259 | Python CDP 控制器 | --- ## 🎯 Chrome DevTools 是什么 **Chrome DevTools** 是 Chrome/Chromium 浏览器内置的**开发者调试工具集**,提供: - DOM/CSS 检查与编辑 - JavaScript 调试与性能分析 - 网络请求监控与拦截 - 内存泄漏检测 - 移动端模拟 **底层协议:CDP(Chrome DevTools Protocol)** CDP 是 DevTools 的**通信协议**,允许外部工具通过 WebSocket 与浏览器交互,实现: - 自动化测试 - 网页爬取 - 性能监控 - 安全审计 --- ## 🔌 CDP 协议架构 ### 核心概念 ``` 外部工具(Puppeteer/Playwright/自定义) ↓ WebSocket Chrome DevTools Protocol (CDP) ↓ Chromium 浏览器内核 ``` - **Domain(域)**:功能分类(Network、DOM、Page 等) - **Command(命令)**:工具→浏览器的请求 - **Event(事件)**:浏览器→工具的通知 - **Type(类型)**:数据结构定义 ### 协议版本 | 版本 | 说明 | 适用场景 | |------|------|---------| | **latest (tot)** | 最新版本,频繁变更 | 最新功能探索 | | **v8-inspector** | Node.js 调试专用 | Node.js 调试 | | **stable 1.3** | Chrome 64 锁定,向后兼容 | 生产环境 | --- ## 📦 45+ 核心 Domain 分类 ### 🔍 页面与 DOM | Domain | 核心能力 | |--------|---------| | **Page** | 页面导航、截图、打印、生命周期管理 | | **DOM** | DOM 树查询、修改、监听变化 | | **DOMSnapshot** | 获取完整 DOM 快照 | | **DOMDebugger** | DOM 事件断点 | | **DOMStorage** | localStorage/sessionStorage 操作 | ### 🌐 网络 | Domain | 核心能力 | |--------|---------| | **Network** | 请求/响应拦截、修改、性能分析 | | **Fetch** | 请求级拦截与修改(Mock API) | | **Security** | 证书、HTTPS、安全状态 | | **ServiceWorker** | SW 注册/注销/调试 | ### ⚡ 调试与性能 | Domain | 核心能力 | |--------|---------| | **Runtime** | JS 执行、对象检查、异常捕获 | | **Debugger** | 断点、单步执行、调用栈 | | **Profiler** | CPU 性能分析 | | **HeapProfiler** | 内存堆分析、泄漏检测 | | **Performance** | 性能指标采集 | | **Tracing** | 底层追踪数据 | ### 📱 模拟与仿真 | Domain | 核心能力 | |--------|---------| | **Emulation** | 设备模拟、屏幕尺寸、地理位置 | | **Input** | 模拟鼠标/键盘/触摸输入 | | **DeviceOrientation** | 模拟设备方向 | ### 🎨 样式与渲染 | Domain | 核心能力 | |--------|---------| | **CSS** | 样式表查询、修改、计算样式 | | **Overlay** | 高亮元素、网格线、滚动条 | | **LayerTree** | 渲染层分析 | | **Animation** | 动画检查与控制 | ### 🔧 其他 | Domain | 核心能力 | |--------|---------| | **Browser** | 浏览器级操作(版本、窗口管理) | | **Target** | Tab/Worker 管理 | | **Log** | 控制台日志捕获 | | **Console** | 控制台消息 | | **IO** | 流式数据读写 | | **Storage** | Cookie、IndexedDB、Cache | --- ## 💻 常用 CDP 命令速查 ### 页面操作 ```javascript // 导航到页面 Page.navigate({ url: 'https://example.com' }) // 截图 Page.captureScreenshot({ format: 'png' }) // 打印为 PDF Page.printToPDF({ landscape: false, displayHeaderFooter: true }) ``` ### 网络拦截 ```javascript // 启用网络域 Network.enable() // 拦截并修改请求 Fetch.enable({ patterns: [{ urlPattern: '*', requestStage: 'Request' }] }) // 修改请求头 Fetch.continueRequest({ requestId, headers: [{ name: 'User-Agent', value: 'Custom' }] }) // Mock 响应 Fetch.fulfillRequest({ requestId, responseCode: 200, body: btoa(JSON.stringify({ mock: true })) }) ``` ### JS 执行 ```javascript // 执行 JS Runtime.evaluate({ expression: 'document.title' }) // 设置断点 Debugger.enable() Debugger.setBreakpoint({ location: { scriptId: '1', lineNumber: 10 } }) ``` ### 设备模拟 ```javascript // 模拟 iPhone Emulation.setDeviceMetricsOverride({ width: 375, height: 812, deviceScaleFactor: 3, mobile: true }) // 模拟地理位置 Emulation.setGeolocationOverride({ latitude: 39.9042, longitude: 116.4074 }) ``` ### DOM 操作 ```javascript // 获取 DOM 树 DOM.getDocument({ depth: 2 }) // 查询元素 DOM.querySelector({ nodeId: 1, selector: '.my-class' }) // 修改属性 DOM.setAttributeValue({ nodeId: 42, name: 'class', value: 'new-class' }) ``` --- ## 🛠️ 主流 CDP 库对比 ### Puppeteer(官方推荐) ```javascript const puppeteer = require('puppeteer'); const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('https://example.com'); await page.screenshot({ path: 'example.png' }); await browser.close(); ``` | 特性 | 说明 | |------|------| | **语言** | Node.js | | **维护** | Google 官方 | | **Stars** | 94k+ | | **适合** | 爬虫、截图、自动化测试 | ### Playwright(多浏览器) ```javascript const { chromium } = require('playwright'); const browser = await chromium.launch(); const page = await browser.newPage(); await page.goto('https://example.com'); // 同时支持 Chromium / Firefox / WebKit ``` | 特性 | 说明 | |------|------| | **语言** | JS/Python/Java/.NET | | **维护** | 微软 | | **Stars** | 87k+ | | **适合** | 跨浏览器 E2E 测试 | ### go-rod(Go 语言) ```go package main import "github.com/go-rod/rod" func main() { page := rod.New().MustConnect().MustPage("https://example.com") page.MustElement("input").MustInput("hello") page.MustScreenshot("example.png") } ``` | 特性 | 说明 | |------|------| | **语言** | Go | | **Stars** | 6.8k | | **适合** | Go 生态、高性能爬虫 | ### ichrome(Python) ```python import asyncio from ichrome import AsyncChrome async def main(): async with AsyncChrome() as chrome: tab = await chrome.connect_tab(0) await tab.goto('https://example.com') await tab.screenshot(path='example.png') asyncio.run(main()) ``` | 特性 | 说明 | |------|------| | **语言** | Python | | **Stars** | 259 | | **适合** | Python 爬虫、自动化 | --- ## 🎯 典型应用场景 ### 1. 网页自动化 ``` 场景:自动填写表单、点击按钮、爬取数据 方案:Puppeteer / Playwright 关键 API:Page.navigate, Page.click, Page.type ``` ### 2. 网络请求拦截 ``` 场景:Mock API 响应、修改请求头 方案:Fetch Domain 关键 API:Fetch.enable, Fetch.fulfillRequest ``` ### 3. 性能分析 ``` 场景:检测页面加载性能、内存泄漏 方案:Performance + HeapProfiler Domain 关键 API:Performance.getMetrics, HeapProfiler.takeHeapSnapshot ``` ### 4. 移动端测试 ``` 场景:模拟手机设备访问 方案:Emulation Domain 关键 API:Emulation.setDeviceMetricsOverride ``` ### 5. 安全审计 ``` 场景:检测 XSS、检查 HTTPS 方案:Security + DOMDebugger Domain 关键 API:Security.getSecurityState, DOMDebugger.setDOMBreakpoint ``` --- ## 🔧 开发调试技巧 ### 启用 Protocol Monitor 1. 打开 DevTools → 设置 ⚙️ 2. Experiments → 启用 "Protocol Monitor" 3. More Tools → Protocol monitor 4. 查看所有 CDP 命令和响应 ### 直接发送 CDP 命令 ``` # 截图 Page.captureScreenshot # 带参数 {"cmd":"Page.captureScreenshot","args":{"format":"jpeg"}} ``` ### 远程调试 ```bash # 启动 Chrome 远程调试 chrome --remote-debugging-port=9222 # 连接 WebSocket ws://localhost:9222/devtools/page/ ``` --- ## 📊 CDP 在 AI 编程中的应用 | 场景 | CDP 的作用 | |------|-----------| | **Superpowers 代码审查** | 通过 CDP 检查页面实际渲染效果 | | **AI 自动化测试** | 控制浏览器执行 E2E 测试 | | **网页爬取** | 动态渲染页面的内容提取 | | **性能优化建议** | CDP 采集真实性能数据 | | **安全扫描** | 自动检测前端安全问题 | --- ## 🔗 资源 | 资源 | 链接 | |------|------| | **CDP 官方文档** | https://chromedevtools.github.io/devtools-protocol/ | | **Getting Started with CDP** | https://github.com/aslushnikov/getting-started-with-cdp | | **awesome-chrome-devtools** | https://github.com/ChromeDevTools/awesome-chrome-devtools | | **Puppeteer** | https://github.com/puppeteer/puppeteer | | **Playwright** | https://github.com/microsoft/playwright | | **go-rod** | https://github.com/go-rod/rod | | **cdpnetool** | https://github.com/241x/cdpnetool | --- ## 💡 与 OpenClaw 的结合点 | 结合方式 | 说明 | |---------|------| | **Browser 工具** | OpenClaw 已通过 Playwright 集成 CDP | | **网页自动化** | 可通过 CDP 控制浏览器完成任务 | | **性能监控** | CDP 采集数据 → AI 分析建议 | | **安全审计** | CDP 检测 → AI 生成报告 | --- *整理:知识库管理员 | 归档:2026-04-25*