Files
chill_notes/AI工程/ChromeDevTools与CDP协议完全指南.md
2026-04-25 00:32:04 +08:00

9.2 KiB
Executable File
Raw Blame History

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 调试与性能分析
  • 网络请求监控与拦截
  • 内存泄漏检测
  • 移动端模拟

底层协议CDPChrome 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 命令速查

页面操作

// 导航到页面
Page.navigate({ url: 'https://example.com' })

// 截图
Page.captureScreenshot({ format: 'png' })

// 打印为 PDF
Page.printToPDF({ 
  landscape: false, 
  displayHeaderFooter: true 
})

网络拦截

// 启用网络域
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 执行

// 执行 JS
Runtime.evaluate({ 
  expression: 'document.title' 
})

// 设置断点
Debugger.enable()
Debugger.setBreakpoint({
  location: {
    scriptId: '1',
    lineNumber: 10
  }
})

设备模拟

// 模拟 iPhone
Emulation.setDeviceMetricsOverride({
  width: 375,
  height: 812,
  deviceScaleFactor: 3,
  mobile: true
})

// 模拟地理位置
Emulation.setGeolocationOverride({
  latitude: 39.9042,
  longitude: 116.4074
})

DOM 操作

// 获取 DOM 树
DOM.getDocument({ depth: 2 })

// 查询元素
DOM.querySelector({
  nodeId: 1,
  selector: '.my-class'
})

// 修改属性
DOM.setAttributeValue({
  nodeId: 42,
  name: 'class',
  value: 'new-class'
})

🛠️ 主流 CDP 库对比

Puppeteer官方推荐

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多浏览器

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-rodGo 语言)

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 生态、高性能爬虫

ichromePython

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
关键 APIPage.navigate, Page.click, Page.type

2. 网络请求拦截

场景Mock API 响应、修改请求头
方案Fetch Domain
关键 APIFetch.enable, Fetch.fulfillRequest

3. 性能分析

场景:检测页面加载性能、内存泄漏
方案Performance + HeapProfiler Domain
关键 APIPerformance.getMetrics, HeapProfiler.takeHeapSnapshot

4. 移动端测试

场景:模拟手机设备访问
方案Emulation Domain
关键 APIEmulation.setDeviceMetricsOverride

5. 安全审计

场景:检测 XSS、检查 HTTPS
方案Security + DOMDebugger Domain
关键 APISecurity.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"}}

远程调试

# 启动 Chrome 远程调试
chrome --remote-debugging-port=9222

# 连接 WebSocket
ws://localhost:9222/devtools/page/<pageId>

📊 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