Chrome CDP 是一个轻量级的 Chrome DevTools Protocol 命令行工具。它通过 WebSocket 直接连接,无需 Puppeteer,可处理 100 个以上标签页并实现即时连接。
用途 该工具用于与本地 Chrome 浏览器会话进行交互。根据说明,它仅在用户被要求检查、调试或与 Chrome 中打开的页面交互后、且用户明确批准的情况下使用。
前置条件
- Chrome(或 Chromium、Brave、Edge、Vivaldi),并启用远程调试:打开 chrome://inspect/#remote-debugging 并打开开关。
- Node.js 22+(使用内置 WebSocket)。
- 如果浏览器的 DevToolsActivePort 位于非标准位置,请将 CDP_PORT_FILE 设置为其完整路径。
主要能力与命令 所有命令均使用 scripts/cdp.mjs。其中 <target> 是来自 list 的唯一 targetId 前缀;复制 list 输出中显示的完整前缀(例如 6BE827FA)。CLI 会拒绝有歧义的前缀。
- 列出打开的页面:scripts/cdp.mjs list
- 截图:scripts/cdp.mjs shot <target> [file],默认保存在运行时目录中的 screenshot-<target>.png。仅捕获视口。如果需要折叠线以下的内容,请先用 eval 滚动。输出包含页面的 DPR 和坐标转换提示。
- 无障碍树快照:scripts/cdp.mjs snap <target>
- 执行 JavaScript:scripts/cdp.mjs eval <target> <expr>。注意:当 DOM 在多次 eval 调用之间可能变化时(例如点击 Ignore 后卡片索引会发生偏移),避免使用基于索引的选择(querySelectorAll(...)[i])。应在一次 eval 中收集所有数据,或使用稳定的选择器。
- 其他命令:
- scripts/cdp.mjs html <target> [selector]:获取整页或元素 HTML。
- scripts/cdp.mjs nav <target> <url>:导航并等待加载。
- scripts/cdp.mjs net <target>:资源计时条目。
- scripts/cdp.mjs click <target> <selector>:通过 CSS 选择器点击元素。
- scripts/cdp.mjs clickxy <target> <x> <y>:在 CSS 像素坐标处点击。
- scripts/cdp.mjs type <target> <text>:在当前焦点处使用 Input.insertText;与 eval 不同,它可在跨域 iframe 中工作。
- scripts/cdp.mjs loadall <target> <selector> [ms]:点击“加载更多”直到消失(两次点击之间默认 1500ms)。
- scripts/cdp.mjs evalraw <target> <method> [json]:原始 CDP 命令透传。
- scripts/cdp.mjs open [url]:打开新标签页(每次都会触发 Allow 提示)。
- scripts/cdp.mjs stop [target]:停止守护进程。
坐标 shot 以原生分辨率保存图像:图像像素 = CSS 像素 × DPR。CDP Input 事件(如 clickxy 等)使用 CSS 像素。 CSS px = 截图图像 px / DPR。 shot 会打印当前页面的 DPR。典型 Retina(DPR=2):将截图坐标除以 2。
使用提示
- 对于页面结构,优先使用 snap --compact 而不是 html。
- 在跨域 iframe 中输入文本时使用 type(而不是 eval)——先点击/clickxy 聚焦,然后输入。
- Chrome 在首次访问时会针对每个标签页显示一次“Allow debugging”模态框。后台守护进程会保持会话活跃,因此后续命令无需再次批准。守护进程在 20 分钟无活动后自动退出。
适用场景 适用于需要对本地 Chrome 中打开的页面进行检查、调试或交互的任务,例如列出标签页、截图、获取无障碍树、执行脚本、导航、点击、输入文本等操作。
限制 仅在用户明确批准后使用。依赖浏览器远程调试和 Node.js 22+。截图仅捕获视口,不包含折叠线以下内容。多步骤 eval 中需注意 DOM 变化导致的索引偏移问题。打开新标签页会触发 Allow 提示。守护进程在 20 分钟无活动后自动退出。官方文本暂未提供。