pasky/chrome-cdp-skill
GitHub: pasky/chrome-cdp-skill
该项目让 AI agent 通过 Chrome 远程调试协议直接连接用户实时浏览器会话,实现对已打开标签页的读取与交互操作。
Stars: 3111 | Forks: 197
# chrome-cdp
让你的 AI agent 看到并与你的**实时 Chrome 会话**进行交互——包括你已经打开的标签页、已登录的账户以及当前的页面状态。无需浏览器自动化框架,无需单独的浏览器实例,也无需重新登录。
开箱即用,兼容任何 Chrome 安装版。只需拨动一个开关即可启用,无需安装任何其他内容。
## 为什么这很重要
大多数浏览器自动化工具会启动一个全新且隔离的浏览器。而这个工具会直接连接到你正在运行的 Chrome,因此你的 agent 可以:
- 读取你已登录的页面(Gmail、GitHub、内部工具等)
- 与你正在积极操作的标签页进行交互
- 查看页面在工作流中途的实际状态,而不是一个重新加载的干净页面
## 安装
### 作为 pi skill
```
pi install git:github.com/pasky/chrome-cdp-skill@v1.0.1
```
### 对于其他 agent(Amp、Claude Code、Cursor 等)
将 `skills/chrome-cdp/` 目录克隆或复制到你的 agent 加载 skills 或 context 的任何位置。唯一的运行时依赖项是 **Node.js 22+** —— 无需 npm install。
### 在 Chrome 中启用远程调试
导航到 `chrome://inspect/#remote-debugging` 并拨动开关。就这样。
CLI 会自动检测 macOS、Linux 和 Windows 上的 Chrome、Chromium、Brave、Edge 和 Vivaldi。如果你的浏览器将 `DevToolsActivePort` 存储在非标准位置,请将 `CDP_PORT_FILE` 环境变量设置为完整路径。
## 用法
```
scripts/cdp.mjs list # list open tabs
scripts/cdp.mjs shot # screenshot → runtime dir
scripts/cdp.mjs snap # accessibility tree (compact, semantic)
scripts/cdp.mjs html [".selector"] # full HTML or scoped to CSS selector
scripts/cdp.mjs eval "expression" # evaluate JS in page context
scripts/cdp.mjs nav https://... # navigate and wait for load
scripts/cdp.mjs net # network resource timing
scripts/cdp.mjs click "selector" # click element by CSS selector
scripts/cdp.mjs clickxy # click at CSS pixel coordinates
scripts/cdp.mjs type "text" # type at focused element (works in cross-origin iframes)
scripts/cdp.mjs loadall "selector" # click "load more" until gone
scripts/cdp.mjs evalraw [json] # raw CDP command passthrough
scripts/cdp.mjs open [url] # open new tab (triggers Allow prompt)
scripts/cdp.mjs stop [target] # stop daemon(s)
```
`` 是由 `list` 显示的 targetId 的唯一前缀。
## 为什么不用 chrome-devtools-mcp?
[chrome-devtools-mcp](https://github.com/ChromeDevTools/chrome-devtools-mcp) 会在每次执行命令时重新连接,因此 Chrome 的“允许调试”弹窗可能会反复出现,并且在打开许多标签页时,目标枚举会超时。`chrome-cdp` 会为每个标签页保持一个持久的 daemon —— 该弹窗只会触发一次,并且它可以稳定处理 100 多个标签页。
## 工作原理
直接连接到 Chrome 的远程调试 WebSocket —— 没有 Puppeteer,也没有任何中间件。在首次访问某个标签页时,会生成一个轻量级的后台 daemon 来保持会话开启。Chrome 的“允许调试”弹窗在每个标签页上只出现一次;随后的命令会静默复用该 daemon。Daemon 在不活动 20 分钟后会自动退出。
这种方法也是它能够稳定处理 100 多个打开的标签页的原因,而基于 Puppeteer 构建的工具在目标枚举期间经常会超时。
标签:Chrome DevTools Protocol, GNU通用公共许可证, MITM代理, Node.js, RPA, 浏览器自动化, 自定义脚本