🎯 一款可定制、具备反检测功能的云浏览器,由自主研发的 Chromium驱动,专为网页爬虫AI 代理设计。👉立即试用
返回博客

Chrome DevTools 协议 (CDP) 是什么?

Alex Johnson
Alex Johnson

Senior Web Scraping Engineer

14-Jul-2026

TL;DR:

  • Chrome DevTools协议(CDP)是让外部工具能够对基于Chromium的浏览器进行仪器化、检查、调试和分析的通信协议。 Chrome DevTools本身通过CDP与浏览器进行通信,Puppeteer、Playwright和chromedp也是如此。
  • CDP是按域组织的。 每个域——PageNetworkDOMRuntimeTargetBrowser及60多个其他域——定义了它所接受的命令和它所发送的事件。
  • 传输是通过WebSocket的JSON消息。 客户端将命令作为包含idmethodparams的JSON对象发送;浏览器以匹配的结果进行回复,并在事件发生时流式传输事件。
  • 它有两个版本。 最前沿(tot)版本变化频繁,没有兼容性保证;稳定的1.3版本(来自Chrome 64)是受支持的子集。
  • CDP是现代自动化连接到浏览器的方式——包括远程浏览器。将CDP客户端指向WebSocket端点,它可以驱动该浏览器,无论它在哪里运行。
  • Scrapeless Scraping Browser是CDP端点。 Puppeteer、Playwright或chromedp连接到一个WebSocket URL并对真实的云Chromium进行操作,未做改动。
  • 免费开始。 新的Scrapeless账户包括免费的Scraping Browser运行时——请在app.scrapeless.com注册。

介绍:自动化与Chrome对话的语言

Chrome DevTools协议是浏览器暴露出来的界面,以便外部工具能够控制和观察它。当你打开Chrome的DevTools面板,查看网络请求或逐步调试JavaScript时,面板并不是直接深入浏览器。在连接上发送CDP命令并接收CDP事件。每个基于Chromium构建的浏览器自动化库在底层使用相同的协议。

这对于爬虫和测试很重要,因为CDP让脚本能够做出人类使用DevTools时能够做到的事情:导航、在渲染后读取DOM、拦截请求、捕获屏幕截图以及在页面中评估JavaScript。本指南解释了CDP是什么,它的域和消息如何工作,以及为什么CDP端点是驱动云浏览器时的确切连接对象。


CDP的确切含义

Chrome DevTools协议让工具能够对Chromium、Chrome和其他基于Blink的浏览器进行仪器化、检查、调试和分析。它是一个浏览器内部的远程控制接口,由Chrome DevTools团队维护。官方协议定义列出了每个域、命令和事件,浏览器在其/json/protocol/端点暴露了相同的定义。

CDP本身并不是一个爬虫工具——它是工具底层的一层。Puppeteer、Playwright、chromedp和Lighthouse都将它们的高级调用翻译成CDP命令,这就是它们能够驱动任何支持CDP的浏览器的原因。

CDP的组织方式:域、命令和事件

CDP将浏览器的表面划分为,每个域拥有一组命令和事件。有60多个域;爬虫大多数接触的只是一个小子集:

控制的内容
Page 导航、生命周期、屏幕截图、print-to-PDF
Network 请求、响应、头信息、拦截
DOM 文档树、节点、属性
Runtime 在页面上下文中评估JavaScript
Target 标签页、框架,以及创建新的浏览器上下文
Input 合成鼠标、键盘和触摸事件
Browser 浏览器级操作和窗口管理

一个命令是你发送给域的请求(例如,Page.navigate)。一个事件是浏览器在发生某事时推送给你的消息(例如,Network.responseReceived)。像Puppeteer的page.goto()这样的高级调用是一个Page.navigate命令,加上对底层生命周期事件的等待。

传输:通过WebSocket的JSON消息

CDP通信是固定结构的序列化JSON对象,通过WebSocket连接进行传输。客户端连接到浏览器的调试WebSocket,然后交换由JSON数据格式定义的消息。

一个命令携带id、命名域和命令的method以及一个params对象:

json Copy
// 发送给浏览器的命令
{ "id": 1, "method": "Page.navigate", "params": { "url": "https://example.com" } }

// 返回的结果,带有匹配的id
{ "id": 1, "result": { "frameId": "…", "loaderId": "…" } }

// 浏览器推送的事件(无id)
{ "method": "Page.loadEventFired", "params": { "timestamp": 12345.6 } }

id 将结果与产生该结果的命令相关联;事件在没有 id 的情况下到达,因为浏览器根据自身的时间表发出它们。客户端通常打开 WebSocket,启用它关心的领域(Network.enablePage.enable),然后在会话的其余时间中交错命令和事件。

协议版本:最新版本和稳定版本

CDP 有两个版本。最新版本tot)跟踪最新的 Chromium,并频繁更改,没有向后兼容的保证。稳定的 1.3 版本是在 Chrome 64 中引入的,是一个受支持的子集,工具可以将其作为稳定目标。一个独立的 v8-inspector 接口暴露相同风格的协议,用于调试和分析 Node.js。大多数自动化库绑定到一个 Chromium 构建,并使用匹配的协议,这就是为什么库和浏览器版本通常一起更新。

使用 CDP 的工具

CDP 是一组广泛工具的共享基础:

  • Chrome 开发者工具 — 浏览器中的面板是一个 CDP 客户端。
  • Puppeteer — 默认通过 CDP 连接。
  • Playwright — 通过 CDP 驱动 Chromium(并为 Firefox 和 WebKit 实现自己的协议)。
  • chromedp — 一个直接使用 CDP 的 Go 库。
  • Lighthouse — 通过 CDP 收集性能和审计数据。

由于它们都使用相同的协议,任何一个工具都可以附加到它没有启动的浏览器上——只要该浏览器暴露 CDP 端点。新兴的跨浏览器标准,WebDriver BiDi,建立在 CDP 首创的双向命令和事件模型之上。

CDP 和云浏览器

CDP 端点不必在您的机器上。由于该协议通过 WebSocket 运行,客户端可以连接到任何地方运行的浏览器——这正是云浏览器的工作原理。Scrapeless Scraping Browser 在一个单一的 WebSocket URL 上暴露了一个 CDP 端点,因此 CDP 客户端连接到真实的云 Chromium,而不是本地的:

  • Puppeteer 使用 puppeteer.connect({ browserWSEndpoint }) 连接。
  • Playwright 使用 chromium.connectOverCDP() 连接。
  • chromedp 使用 NewRemoteAllocator 连接。

代码没有改变;只有端点移动。浏览器在云中运行,具有真实的 Chromium 指纹和住宅出口,您的 CDP 兼容库以与本地浏览器相同的方式驱动它。

同一端点还响应一些超出标准协议的领域——Captcha.* 用于 CAPTCHA 检测和解决,Agent.* 用于模拟点击和打字——详细记录在 Scrapeless CDP API 参考 中。已经会讲 CDP 的客户端可以以调用 Page.navigate 的相同方式调用它们。

app.scrapeless.com 免费计划中获取您的 API 密钥。

在免费计划中获取您的 API 密钥: app.scrapeless.com

总结:每个 Chromium 工具下的同一协议

CDP 是浏览器自动化的共同基础:一组领域,通过 WebSocket 以 JSON 命令和事件的形式交换,让工具驱动和观察一个 Chromium 浏览器。理解这一点可以解释为什么 Puppeteer、Playwright 和 chromedp 在底层感到相似,为什么库和浏览器版本会一起更新,以及为什么连接到远程浏览器就像指向不同的 WebSocket URL 一样简单。有关如何通过 Python 驱动云浏览器的示例,请参见 Scrapling 生产抓取指南,并比较 Scrapeless 定价页面 上的计划。


准备通过 CDP 驱动云浏览器了吗?

加入我们的社区,领取免费计划,并与构建基于 CDP 的自动化的开发者联系:Discord · Telegram
app.scrapeless.com 注册以获取免费的抓取浏览器运行时,并通过一个 WebSocket URL 将您的 CDP 客户端指向云浏览器。


常见问题解答

问:CDP 和 WebDriver 是一样的吗?
不是。CDP 是 Chromium 自己的低级双向协议(通过 WebSocket 发送命令和事件);经典的 WebDriver 是 W3C 标准化的请求-响应 HTTP 协议。较新的 WebDriver BiDi 标准在浏览器之间引入了类似 CDP 的双向模型。

问:当我编写抓取工具时,是否直接使用 CDP?
通常不是。您会使用一个库——Puppeteer、Playwright 或 chromedp——将您的调用转换为 CDP 命令。只有在库未公开的功能下,您才会直接使用原始 CDP。

问:Playwright 使用 CDP 吗?
对于 Chromium 是的。Playwright 通过 CDP 驱动 Chromium;对于 Firefox 和 WebKit,它使用自己的协议,这就是为什么某些特定于 CDP 的功能仅限于 Chromium。

问:工具如何通过 CDP 连接到浏览器?
浏览器公开一个调试 WebSocket URL。客户端打开该 WebSocket,交换 JSON 命令和事件。像 Scrapeless 这样的云浏览器直接提供该 WebSocket URL,因此相同的客户端可以连接到远程浏览器。

问:tip-of-tree 和稳定 CDP 之间有什么区别?
tip-of-tree 跟踪最新的 Chromium,并可能在没有通知的情况下更改;稳定的 1.3 (来自 Chrome 64)是工具可以依赖的固定子集。库通常会锁定到 Chromium 构建以及随其发布的协议版本。

在Scrapeless,我们仅访问公开可用的数据,并严格遵循适用的法律、法规和网站隐私政策。本博客中的内容仅供演示之用,不涉及任何非法或侵权活动。我们对使用本博客或第三方链接中的信息不做任何保证,并免除所有责任。在进行任何抓取活动之前,请咨询您的法律顾问,并审查目标网站的服务条款或获取必要的许可。

最受欢迎的文章

目录