前言¶
在 Harness 里让智能体「看见」并「动手」网页,常见做法是 Puppeteer、Playwright 或自己开 CDP 端口。这些路径要么要单独起浏览器实例,要么事件是页面里 dispatchEvent 合成的,isTrusted 为 false,滑块、富文本和部分反爬逻辑会直接拒掉。若你希望操作的是你正在用的那一枚 Chrome 标签,且点击、输入走浏览器真实输入管线,就需要 Harness 侧提供 @ 选页和 chrome_* 工具,Chrome 侧用扩展在标签内接线。下面按仓库说明介绍社区插件 dsh-chrome-bridge(包名 dsh-chrome-tab,版本 0.1.4,MIT,维护者 LouXiaXiaoHei,DSH 社区目录分类为「联网工具」)。
这是什么¶
dsh-chrome-bridge 由两半组成:DeepSeek Harness 插件(@ 菜单与 chrome_* 工具)和 Chrome Manifest V3 扩展(在真实标签页里读 DOM、发输入)。二者经本机 WebSocket 桥通信,扩展会探测 30795–30805 端口并连到当前 Harness 实例,一般不需要你手动填远程调试端口。
设计动机在 README 里写得很直接:未开 --remote-debugging-port 时外部进程连不上 CDP;在 macOS 上还有 TCC、AppleScript 自动化等限制。因此采用「插件 + 扩展」而不是单靠外挂进程抢 profile。
核心功能¶
@ 提及与读页¶
在输入框 @ 可选一个正在运行的标签页,模型可读取标题、URL、标题层级、带编号的可交互元素、正文、滚动位置等。建议工作流是先看再动:chrome_snapshot 读结构,chrome_screenshot 看图(默认在截图上标与快照一致的编号框,图存 ~/.dsh/chrome-tab-shots/),再用 chrome_click / chrome_type 等动手。
chrome_* 工具集¶
省略 tabId 时,默认作用于最近一次 @ 选中的标签。README 列出的工具包括:
| 工具 | 作用 |
|---|---|
chrome_tabs |
列出可操作标签页,获取 tabId |
chrome_snapshot |
页面快照(结构、编号元素、正文、滚动位置) |
chrome_click |
按快照 index 或无障碍树 name 点击 |
chrome_move |
移动指针到元素或坐标,不点击 |
chrome_click_at |
按视口 x/y 或 index 点击 |
chrome_type |
输入文字;支持 replace、pressEnter |
chrome_press |
单键或组合键 |
chrome_drag |
拖拽(起点/终点可用 name、index 或坐标) |
chrome_scroll |
滚到顶/底、滚到元素或按像素 |
chrome_query |
CSS 选择器查询,可读表单实时值 |
chrome_wait |
等选择器或文本(最多 15 秒) |
chrome_open |
用 URL 开新标签 |
chrome_screenshot |
截图交给模型;marks: false 可关编号框 |
按 name 匹配的是 Chrome 暴露给辅助功能的语义树(按钮文字、链接、aria-label、占位符等),通常比单次快照里的 index 更耐看;页面一变,快照编号会失效。
可信输入:CDP 与 macOS 原生通道¶
动作按顺序尝试两条通道,成功即停;页面内合成 dispatchEvent 通道已移除,两条都失败则报错,不会静默降级。
- CDP(主干):扩展
debugger权限下,经Input.dispatchMouseEvent/dispatchKeyEvent/insertText等,事件序列贴近真人,无需 Chrome 在前台,也不移动系统鼠标。 - 原生(仅 macOS):辅助功能授权 + 编译好的
axdriver(由mac/axdriver.swift编译到~/.dsh/chrome-tab-native/axdriver,或复用预编译二进制),用于 CDP 够不着的语义滚动等场景。Windows 与 Linux 无原生通道,由 CDP 承担点击、输入、拖拽与滚动。
扩展加载后,页面上会出现 #__dsh_ai_cursor 表示「该标签正在被操作」;它是页面内 DOM 指针,不驱动系统光标,也不影响你自己用鼠标。
安装与启用¶
README 要求顺序:先装 Harness 插件 → 在 Chrome 加载扩展 → 授权(按需)。任一步缺失时,chrome_tabs 会提示缺哪一步。
1. 安装 Harness 插件¶
任选一种方式。
让 Agent 安装时,可把下面整句发给当前 Agent:
请安装 DSH 插件 dsh-chrome-tab,仓库是 https://github.com/LouXiaXiaoHei/dsh-chrome-bridge
从 GitHub 安装(README 原文命令):
dsh plugin --profile desktop add github:LouXiaXiaoHei/dsh-chrome-bridge
本地开发:
dsh plugin --profile desktop add link:/path/to/dsh-chrome-bridge
命令里的 desktop 是桌面版默认 profile;其他 profile 请换成对应名称。桌面版也可在「设置 → 插件」中安装,无需命令行。
2. 在 Chrome 加载扩展¶
插件启动会把扩展刷新到 ~/.dsh/chrome-tab-extension/(无法写入时改用插件目录下 extension/,以 chrome_tabs 提示为准)。打开 chrome://extensions → 开启「开发者模式」→「加载已解压的扩展程序」→ 选择上述目录。Chrome 156 起不能单靠 --load-extension 启动参数,这一步需手动做一次;之后 Chrome 会记住路径。
扩展每 30 秒探测 30795–30805,连 startedAt 最新的桥;多个 Harness 同时运行时跟最新的实例。
3. 授权(macOS 原生通道可选)¶
debugger 权限随加载扩展一并授予。仅在需要 macOS 原生通道时额外准备:系统设置 → 隐私与安全性 → 辅助功能中勾选运行 DSH 的应用;并安装 Xcode 命令行工具(xcode-select --install)。没有原生通道仍可主要用 CDP。
验证¶
在 Harness 中执行:
chrome_tabs
返回标签列表即表示桥已接通。连不上时可按 README「排查」一节对比 30795–30805 上 /dsh-chrome-tab/config 与当前 DSH 实例的 /dsh-chrome-tab/status 是否一致;不一致时重启 DSH 可清掉旧桥。
典型用法¶
在 @ 选中标签后,可直接用自然语言描述目标,或由模型调用工具。README 示例:
chrome_click { name: "登录" }
chrome_type { name: "搜索", text: "茅台", pressEnter: true }
chrome_scroll { name: "页脚" }
扩展改过后,需在 chrome://extensions 点扩展的刷新;Harness 插件在插件管理中更新。扩展内容会随插件启动同步到 ~/.dsh/chrome-tab-extension/,再手动刷新扩展即可。
适用场景与注意¶
适合谁:需要在 DSH 对话里引用当前 Chrome 会话中的页面、读结构并做点击/输入/滚动/截图的开发者;希望输入事件 isTrusted 为真、减少被前端脚本当成脚本注入拒绝的情况。
使用注意:
- 插件与扩展均在本机运行,桥监听本机端口;多开 Harness 时注意扩展会跟「最新启动」的实例,排查文档说明了热重载后旧端口占用问题。
- 拖拽在 macOS 原生通道可能短暂牵动系统光标(README 有说明);优先 CDP 时可减少该影响。
- 插件以当前 DSH 进程权限运行,安装前请自行查看 GitHub 仓库 源码与 MIT 许可证;社区目录 SkillHub 插件页 与 GitHub 无 DeepSeek / 幻方官方从属关系,属 DSH「一切皆插件」生态中的第三方条目。
结尾¶
经过上面的步骤,你可以在 DeepSeek Harness 里用 @ 绑定真实标签,借助 chrome_tabs、chrome_snapshot 与一系列 chrome_* 工具读页并操作,输入以 CDP 为主、在 macOS 上可选原生通道补位。详情与测试、排查以仓库 README 为准。