dsh-chrome-bridge:在 DeepSeek Harness 里 @ 真实 Chrome 标签并可信操作

前言

在 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 通道已移除,两条都失败则报错,不会静默降级。

  1. CDP(主干):扩展 debugger 权限下,经 Input.dispatchMouseEvent / dispatchKeyEvent / insertText 等,事件序列贴近真人,无需 Chrome 在前台,也不移动系统鼠标。
  2. 原生(仅 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 为准。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye