<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Chrome | 面条的草稿箱</title><description>无原创，纯转发</description><link>http://drafts.miantiao.me</link><item><title>深入浅出 Chrome DevTools Protocol (CDP)：浏览器自动化的幕后功臣当你在 Chrome 中按下 F12 打开开发者工具，查看网络请求、调试 JS 代码或模拟手机时，你是否好奇过这个面板是如何与浏览器核心进行通信的？答案就是 CDP（Chrome DevTools Protocol，Chrome 开发者工具协议）</title><link>http://drafts.miantiao.me/posts/161</link><guid isPermaLink="true">http://drafts.miantiao.me/posts/161</guid><pubDate>Sat, 18 Jul 2026 00:52:24 GMT</pubDate><content:encoded>深入浅出 &lt;mark class=&quot;highlight&quot;&gt;Chrome&lt;/mark&gt; DevTools Protocol (CDP)：浏览器自动化的幕后功臣&lt;br /&gt;&lt;br /&gt;当你在 &lt;mark class=&quot;highlight&quot;&gt;Chrome&lt;/mark&gt; 中按下 F12 打开开发者工具，查看网络请求、调试 JS 代码或模拟手机时，你是否好奇过这个面板是如何与浏览器核心进行通信的？&lt;br /&gt;&lt;br /&gt;答案就是 &lt;b&gt;CDP（&lt;/b&gt;&lt;mark class=&quot;highlight&quot;&gt;&lt;b&gt;Chrome&lt;/b&gt;&lt;/mark&gt;&lt;b&gt; DevTools Protocol，&lt;/b&gt;&lt;mark class=&quot;highlight&quot;&gt;&lt;b&gt;Chrome&lt;/b&gt;&lt;/mark&gt;&lt;b&gt; 开发者工具协议）&lt;/b&gt;。它是所有 Chromium 系浏览器（包括 &lt;mark class=&quot;highlight&quot;&gt;Chrome&lt;/mark&gt;、Edge、Brave、Arc 等）对外的控制接口。无论是开发者面板本身，还是 Puppeteer、Playwright 等自动化测试框架，甚至是最新的 AI 浏览器 Agent，底层都依赖 CDP。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;什么是 CDP？&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;CDP 是一个基于 JSON 的通信协议，通常通过 WebSocket 传输。它将浏览器的控制权划分为多个不同的“域”（Domains）：&lt;br /&gt;&lt;br /&gt;•   &lt;b&gt;Page&lt;/b&gt;：负责控制页面导航、截屏等。&lt;br /&gt;•   &lt;b&gt;Network&lt;/b&gt;：观察和拦截网络请求与响应。&lt;br /&gt;•   &lt;b&gt;Runtime&lt;/b&gt;：执行 JavaScript 代码并获取控制台输出。&lt;br /&gt;•   &lt;b&gt;Input&lt;/b&gt;：模拟底层的鼠标、键盘和触摸输入。&lt;br /&gt;•   &lt;b&gt;Target&lt;/b&gt;：发现并连接到不同的页面、Iframe 或 Service Worker。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;为什么直接操作原生 CDP 非常困难？&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;虽然发送 JSON 指令看起来很简单，但维护浏览器状态却极其复杂：&lt;br /&gt;&lt;br /&gt;1.  &lt;b&gt;动态生命周期&lt;/b&gt;：页面导航会销毁旧的 JavaScript 执行上下文并创建新的上下文。一旦发生跳转，之前的对象 ID 和引用都会失效。&lt;br /&gt;2.  &lt;b&gt;多进程架构（Site Isolation）&lt;/b&gt;：为了安全，浏览器会将跨站点的 Iframe 放在不同的渲染进程中。在 CDP 中，这意味着它们会被作为不同的 Target 暴露，你需要自己管理复杂的 Session 树。&lt;br /&gt;3.  &lt;b&gt;协议演进快&lt;/b&gt;：CDP 的方法会随着 Chromium 的更新而频繁变动，维护兼容性成本极高。&lt;br /&gt;&lt;br /&gt;因此，在实际开发中，更推荐使用 Playwright 或 Puppeteer 这样成熟的库。它们帮我们处理了繁琐的等待、定位和生命周期管理，只在需要更底层能力时才向外暴露 CDP 会话。&lt;br /&gt;&lt;br /&gt;理解 CDP 的工作原理，能让我们在构建浏览器自动化工具或浏览器 AI Agent 时，做出更合理的架构设计。&lt;br /&gt;&lt;br /&gt;原文链接：&lt;a href=&quot;https://x.com/kylejeong/status/2078196340216185127&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://x.com/kylejeong/status/2078196340216185127&quot;&gt;https://x.com/kylejeong/status/2078196340216185127&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;/search/result?q=%23%E6%B5%8F%E8%A7%88%E5%99%A8%E8%87%AA%E5%8A%A8%E5%8C%96&quot; title=&quot;#浏览器自动化&quot;&gt;#浏览器自动化&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Chrome&quot; title=&quot;#Chrome&quot;&gt;#Chrome&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23CDP&quot; title=&quot;#CDP&quot;&gt;#CDP&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%BC%80%E5%8F%91%E8%80%85%E5%B7%A5%E5%85%B7&quot; title=&quot;#开发者工具&quot;&gt;#开发者工具&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Web%E5%BC%80%E5%8F%91&quot; title=&quot;#Web开发&quot;&gt;#Web开发&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://x.com/kylejeong/status/2078196340216185127&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;How Agents actually use your browser: A guide to CDP (Chrome DevTools Protocol)&quot;&gt;
  &lt;i class=&quot;link_preview_right_image&quot; style=&quot;background-image:url(&apos;https://cdn4.telesco.pe/file/j5OPvAe292deVcjLj2d3mMFR4yDQsUQZvuMuh0ym9mDWaIDtPweiXjcWpFY2aej3F0LAUkHvMYCNht7g_HdiJadj7zJfCkq42KAUAGwhftaTH0YeTR92xRFTcA-uUIt6JnUfhGUlgEZ-YozmjLnTinWxKwHf4i90RG4ji2bqsHcjfsCRExBPOgZI7RVsRroCWNJKxIvYGgCnKNuwbZk-BdEekfylO-xPwZs3Yl0XCPKNgMLt4BLaoEOryClCFBb_oGCx0VIcaRZkcInbZLIrhrobTmxt6Hzl3gvZuhJnukoDZrWBfpyJdB55LCokR3PnSa7uEVguW4jmPD6ygKJmqw.jpg&apos;)&quot;&gt;&lt;/i&gt;
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;X (formerly Twitter)&lt;/div&gt;
  
  &lt;div class=&quot;link_preview_title&quot;&gt;Kyle Jeong (@kylejeong) on X&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;How Agents actually use your browser: A guide to CDP (&lt;mark class=&quot;highlight&quot;&gt;Chrome&lt;/mark&gt; DevTools Protocol)&lt;/div&gt;
&lt;/a&gt;</content:encoded></item></channel></rss>