跳过主要内容
S

dsh-explorers

startime-ltk/dsh-explorers

通过本机 MV3 扩展与回环桥把 Chrome、Edge、QQ 浏览器接入 DSH,提供 12 个浏览器工具用于导航、快照、点击、输入、提取与截图。浏览器扩展需手动加载(MV3、开发者模式)并与桥配对,且会申请 debugger 权限。

安装

dsh plugin --profile web add github:startime-ltk/dsh-explorers

README

dsh-explorers

安装包见仓库 Releases:-chrome.zip / -edge.zip / -qq.zip 三个浏览器专用包

把你自己的浏览器接进 DSH:dsh 能开网页、读页面、点按钮、填表单、截图 —— 用的是你日常那个 Chrome / Edge / QQ 浏览器(带登录态、带插件),不是另起一个无头浏览器。

Chrome | Edge | QQ 浏览器 —— 同一份 MV3 扩展,装任意一个就够;一个桥可以同时接多个浏览器,命令里用 browser 指定走哪个。

它是怎么工作的

DSH 插件进程 (Electron Host, Node 24)
  lib/index.js            cordis 插件:注册 tools,spawn 桥进程
  lib/bridge-client.js    HTTP 客户端 → 桥
        │ HTTP  POST /command   (Bearer token)
        ▼
  lib/bridge.mjs          独立桥进程(detached,父进程死后自杀)
        │ 127.0.0.1:17731   HTTP + WebSocket
        │ WS /ws            扩展反向连入
        ▼
  extension/background.js  MV3 Service Worker(Chrome / Edge / QQ 浏览器都装同一份)
        │ chrome.tabs / chrome.scripting / chrome.debugger
        ▼
  网页(page-agent.js 注入到 ISOLATED world)

关键点:

  • 扩展主动连桥,桥是唯一固定端口(默认 17731,被占用时 17732…17740)。
  • 同一桥可同时接 Chrome + Edge + QQ 浏览器各一条 WebSocket。
  • 桥只监听 127.0.0.1;token 每次桥启动重新生成。

安装

分两段:① DSH 插件;② 浏览器扩展。完整步骤(含 QQ 浏览器兼容判断、故障排查表)见 docs/INSTALL-zh.md,English: docs/INSTALL.md。

① DSH 插件

一条命令搞定(会备份 profile 的 package.json,幂等,可重复跑;等价于下面手改):

node scripts/install-profile.mjs            # 默认装进 desktop profile
node scripts/install-profile.mjs --uninstall

手改的话是这样:

// %USERPROFILE%\.dsh\profiles\<profile>\package.json
{
  "dependencies": { "dsh-explorers": "link:<插件目录>" },
  "dsh": { "profile": { "bundles": [ /* …原有条目… */ "dsh-explorers" ] } }
}
cd $env:USERPROFILE\.dsh\profiles\<profile>
pnpm install      # 然后重启 DSH(本机实测:DSH 桌面端常会监听 profile 变更自动重载,先等 5–10 秒看 bridge.json 是否出现,没有再重启)

桥起来后 %USERPROFILE%\.dsh\dsh-explorers\bridge.json 里能读到 port 与 token。自检:

node scripts/selfcheck.mjs        # 插件/桥/扩展/安装页 18 项逐条检查

② 浏览器扩展

  1. 打开安装页 http://127.0.0.1:17731/install(端口以 bridge.json 的 port 为准)。 备选入口:http://127.0.0.1:<DSH web 端口>/plugins/dsh-explorers/ —— 第三方 /plugins/... 路由不保证可用,打不开就用桥那个地址,两个入口是同一份页面。 打不开安装页 → 检查 %USERPROFILE%\.dsh\dsh-explorers\bridge.json 是否存在、DSH 是否已启动;文件不在说明桥没跑起来。
  2. 在对应浏览器的卡片上点「下载 Chrome / Edge / QQ 版扩展」(三个包代码相同,只是包内附带各自浏览器的 INSTALL-<浏览器>.txt 安装说明)→ 解压到固定目录 → 打开扩展页(chrome://extensions / edge://extensions / qqbrowser://extensions)→ 开「开发者模式」→「加载已解压的扩展程序」→ 选含 manifest.json 的文件夹。
  3. 点扩展图标 →「自动配对」;失败就把安装页的「复制配对码」粘进扩展设置页。 (桥重启换了 token 时,扩展收到 WS 关闭码 4401 会自己重新配对,一般不用手动操作。)
  4. 回安装页,状态条变绿 = 已连接。

工具(模型可见)

工具作用
browser_status看连接状态与标签页(可用 browser 指定)
browser_tabs标签页:list / new / activate / close / reload / back / forward
browser_navigate打开 URL,可等 load / domcontentloaded
browser_snapshot抓页面:可交互元素 + ref(后续 click/type 用它),或正文 / HTML
browser_click点击:ref / selector / text / 坐标,四种定位
browser_type往输入框输入(React/Vue 兼容的原生 setter),可清空、可提交
browser_key给当前焦点发按键 / 组合键(Control、Shift、Alt、Meta)
browser_scroll滚动页面,或滚到某个 ref
browser_extract提取文本 / HTML / 属性,单条或全部
browser_screenshot视口或全页截图,落盘后交给模型看图
browser_wait等元素 / 文本 / URL,或固定时长;超时返回 matched:false 不报错
browser_eval页面主世界执行 JS,返回可序列化值

典型用法

你:打开 example.com,在页面里找到第一个链接,点进去,然后截图给我。

dsh:browser_navigate  { url: "https://example.com" }
     browser_snapshot  { mode: "interactive" }        → elements: e1 "More information..."
     browser_click     { ref: "e1" }
     browser_extract   { selector: "h1" }
     browser_screenshot{ fullPage: false }            → .dsh-explorers/shots/shot-*.png

安全边界

  1. 桥只监听 127.0.0.1,token 防的是浏览器网页误打和端口串用,不防本机同用户进程(同用户进程本来就能读 bridge.json)。
  2. browser_eval / browser_type 能把页面内容和按键送进网页 —— 只在用户明确要求时用,不要主动填密码。
  3. 扩展申请了 debugger 权限(全页截图用),使用时浏览器会显示"正在调试此浏览器"提示条,这是预期行为。
  4. 扩展不采集、不上传任何数据;命令只来自本机桥。

开发与验证

node scripts/build-extension.mjs      # 打包 dist/dsh-explorers-<version>.zip
node --test                           # 协议单测(自动发现):桥 HTTP / WS / 工具面,50 项
node tests/e2e-edge.mjs               # 真实 Edge 端到端(本机需已装扩展)

安装页是自包含 HTML,可直接离线渲染检查:

node --check pages/install-page.js

目录结构

dsh-explorers/
├─ lib/                  DSH 插件:tools 注册、桥进程、HTTP 客户端(cordis)
├─ extension/            MV3 扩展,Chrome / Edge / QQ 浏览器共用一份
├─ pages/install-page.js 安装页:自包含 HTML,DSH webServer 与桥两个宿主共用
├─ scripts/              构建与开发脚本(含扩展打包、图标生成)
├─ tests/                协议测试(桥 HTTP / WS / 工具面)+ 真实浏览器 E2E
├─ docs/                 INSTALL-zh.md(中文详细指南)· INSTALL.md(English)
├─ dist/                 构建产物 dsh-explorers-<version>.zip(不入库)
├─ PROTOCOL.md           协议契约:端口 / token / action / 错误码 / 安全边界
└─ README.md

已知限制(v1)

  • iframe 内元素:只操作顶层文档,跨 frame 的元素暂不支持。
  • 多标签并发:一次命令只作用于一个标签页;没有批量并行。
  • 下载 / 上传文件:不代管浏览器下载,也不能给 <input type=file> 塞文件。
  • 网络抓包:不拦截、不导出请求(没有 devtools 级网络能力)。
  • 应用商店上架:只支持「加载已解压的扩展程序」,没有商店包与自动更新。

许可

MIT © 2026 dsh-explorers contributors

相关插件