SuperAPI AI 工具集

chrome-cdp-access

智能体与模型

查看项目

更新于 11-04 09:45

技能介绍

用途

chrome-cdp-access 面向“查看或操作用户真实 Chrome 浏览器”的需求,典型场景是用户询问“你能看到我浏览器里打开的内容吗”,或需要读取、操作其已登录的标签页(如 Slack、仪表盘、各类已登录 SaaS 应用)。技能明确说明它不用于通用网页自动化;通用自动化应交给无头浏览器工具。资料还记录了一项明确用户偏好:当用户问“你能看到我的浏览器标签页吗”时,不要默认使用 computer_use 进行屏幕驱动,而优先采用 CDP 或 AppleScript 直接访问,更可靠且不受窗口可见性问题影响。

主要能力

  • AppleScript 只读快速检查:读取窗口数量、前台窗口活动标签页的 URL 与标题,或列出所有窗口所有标签页的 URL,无需额外设置。
  • CDP 完整控制:在第二个 Chrome 实例(使用显式 --user-data-dir)上开放远程调试端口,可进行 DOM 读取、导航和 JS 执行。
  • 提供 Node 22+ 脚本 cdp_eval.js(查找 URL 匹配的标签页、可选导航、执行 JS 并输出 JSON 值),以及 cdp_do.js(在单标签页上链式执行 js:/insert:/key:/clickxy:/upload:/wait: 步骤,适用于 typeahead 与 ProseMirror 编辑器等忽略合成事件的场景)。
  • cdp_upload.js 拦截原生文件选择对话框并提交文件;cdp_drop.js 用 Input.dispatchDragEvent 向没有 input[type=file] 的拖放区投递文件。
  • cdp_probe_click.py 诊断“页面可见但按钮不可点击”(React 未水合)问题,输出 elementFromPoint、覆盖层、fixed 元素、控制台/网络错误及程序化点击结果。
  • cdp_probe_403.py 捕获 4xx 资源的请求头与响应体。
  • launch_chrome_cdp.sh 以正确参数(含 --remote-allow-origins=*)启动或复用 CDP Chrome。

使用方式

资料给出的关键流程:

  1. 只读检查:使用 osascript 获取活动标签页 URL、标题。AppleScript 执行 JS 默认被阻止(提示“通过 AppleScript 执行 JavaScript 已停用”),需要用户在 Chrome 菜单中一次性开启“允许 Apple 事件中的 JavaScript”,无法通过 defaults/Preferences 设置。
  2. Chrome 136+ 注意点:使用默认 user-data-dir 时 Chrome 会忽略 --remote-debugging-port(在 Chrome 151 上验证:参数存在但端口无监听)。不要重启用户现有 Chrome,而应备份标签页、退出 Chrome、复制配置文件(排除 Cache/、Code Cache/、GPUCache/、Service Worker 缓存等),再启动第二个实例:

"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --remote-debugging-port=9222 --remote-allow-origins="*" --user-data-dir="$HOME/.hermes/chrome-cdp" --no-first-run --no-default-browser-check

然后用 curl http://localhost:9222/json/version 和 /json/list 验证。

  1. 执行脚本示例:node scripts/cdp_eval.js --match slack.com --navigate "https://app.slack.com/client/TEAM/CHANNEL" --js "document.title";如需更换端口使用 CDP_PORT。
  2. 若 WebSocket 握手返回 403(未加 --remote-allow-origins=* 时出现),用 kill $(lsof -ti:9222) 结束实例后带参数重启。

适用场景

读取用户已登录的标签页内容、在用户真实会话中执行 JS、需要 DOM 状态或控制台信息时;诊断前端页面按钮无响应、React 未水合、静态资源 4xx 等问题;对 typeahead、富文本编辑器、文件上传与拖放区进行真实输入模拟。资料还提到驱动 LinkedIn Sales Navigator 应参考 sales-navigator 技能。

限制与注意事项

  • CDP 实例是配置文件快照,不会跟随用户的导航变化,需显式重新导航或重新读取 /json/list。
  • 两个 Chrome 实例不能共享同一 profile 目录(SingletonLock),必须复制而不能指向活动 profile。
  • CDP Chrome 会显示“受自动化软件控制”提示条,可能出现在 Dock 中;结束时应告知用户并可关闭。
  • 用户可能在同时使用该 CDP Chrome,执行导航/点击/求值前应先询问;用户要求停止时立即停止,改为逐步指导其手动操作。
  • Network.getAllCookies 需先调用 Network.enable,否则返回 undefined/{}。
  • cdp_eval.js 同步求值:返回 Promise 的表达式输出 {},基于 setTimeout 的异步 JS 不会等待。
  • 存在约 64KB 截断:Runtime.evaluate 的 returnByValue 会静默截断超过约 65536 字符的字符串;终端 stdout 管道也有约 64KB 截断。
  • React/SPA 输入忽略合成事件,需用 Input.dispatchKeyEvent 或 Input.insertText。
  • cdp_eval.js 不支持截图,需用 Page.captureScreenshot 的一次性脚本。
  • 在启动时如出现配置文件选择器,可加 --profile-directory=Default。
  • 关于收费、价格、具体平台支持范围,资料未提供。