dsh-parallel-browser:按对话分窗的后台浏览器自动化

前言

在 DeepSeek Harness(DSH)里让智能体操作网页,常见做法是挂 Playwright MCP 或官方 @deepseek-ai/dsh-browser-use 等后端。多路对话若共用一套前台浏览器,容易抢焦点、登录态混在一起,或一轮结束就把页面收掉。下面介绍社区插件 dsh-parallel-browser(维护者 laoyingfuhuole),它用独立 Electron host 为每个对话分配编号离屏窗口,经 Chrome DevTools Protocol(CDP)驱动页面,DSH 在后台时仍可输入与截图,且不依赖系统指针抢焦点。

这是什么

dsh-parallel-browser 是面向 DSH 的「联网工具」类插件:惰性启动真实 Chromium/Electron,按 exec.agent.id 路由窗口,同一对话复用、不同对话并行;各窗口共享 session.defaultSession 下的 Cookie 与持久化站点数据,页面与快照 ref 仍按窗口隔离。当前包版本 v0.3.4(package.json 为 0.3.4),仓库 laoyingfuhuole/dsh-parallel-browser,社区目录页见 SkillHub 条目。

工具名沿用兼容前缀 browser_use_*,与包重命名无关;请勿与官方 Playwright MCP 或 dsh-browser-use 混为同一实现,应按各自集成方式只启用一种浏览器后端。

核心功能

窗口与并行

  1. 首次调用任一 browser_use_* 工具时才启动 Electron host。
  2. 窗口默认离屏(show: false 后 showInactive()),普通工具不主动激活前台;保留 display surface,避免 DSH 退到后台时 CDP 输入被丢弃。
  3. 对话 ID 来自 DSH 执行上下文;缺失则报错。模型不能通过参数选窗;标题与 Dock/任务栏上的编号仅便于人工辨认,不能当跨对话标识。
  4. 同窗口内请求顺序执行,不同窗口可并行;共享登录数据意味着在一个窗口退出登录会影响同源其他窗口。

页面操作与快照

经 CDP 支持真实鼠标、Input.insertText、Page.captureScreenshot、Runtime.evaluate 等。browser_use_type / browser_use_click 在页内绘制箭头与动作气泡,便于截图可见但不移动用户真实光标。browser_use_snapshot 返回带编号的元素 ref,仅在当次快照内有效。

工具一览

工具 用途
browser_use_open 打开 http(s) URL 并返回快照
browser_use_snapshot 返回编号可交互元素
browser_use_click 按 ref 点击
browser_use_type 聚焦并逐字符输入
browser_use_insert_text 向当前选区插入文本
browser_use_screenshot 保存 JPEG 并返回路径
browser_use_eval 执行页面 JavaScript
browser_use_wait 等待加载 / 选择器 / 文本 / URL
browser_use_assert 校验条件(多条件 AND;至少一项非空字符串)
browser_use_state URL、标题、readyState、首段可见文本
browser_use_back / browser_use_reload 后退 / 刷新
browser_use_close 关闭当前对话窗口,不影响其他对话
browser_use_reset 经用户确认后重置卡住的窗口,保留共享登录数据

默认跨轮次保留页面与未提交内容;只有显式 browser_use_close 或经确认的 browser_use_reset 才回收当前对话现场。host 请求期限 60 秒(含排队);打开页面主框架最多 15 秒。

安装与启用

环境要求(见 README 与 package.json):

  • Node >= 22.19
  • DSH >= 0.1.1-rc.2 且 < 0.3.0
  • Electron 44+(随包声明 electron@^44.10.0,由 profile 包管理器安装)

推荐从插件市场安装,或执行官方给出的命令:

dsh plugin add dsh-parallel-browser

安装后首次工具调用才拉起浏览器。Electron 查找顺序:ELECTRON_PATH → 本包依赖 → $DSH_HOME/profiles/*/node_modules/electron/dist(DSH_HOME 默认 ~/.dsh)。路径无效会直接报错,不会静默换用其他程序。

在插件目录可做只读运行预检:

npm run check:runtime
npm run check:runtime -- --json

若包在但二进制未下载,可按预检报告对应该 profile 下的 electron/install.js 执行安装(可能联网);亦可配置 ELECTRON_MIRROR 控制二进制源,勿用替换 electron.exe 等方式凑合。

可选插件配置:width(默认 1400)、height(默认 900)、screenshotDir(默认 $DSH_HOME/browser-use/screenshots)。旧版 quiet 会被忽略。需独立资料目录时,启动前设置环境变量 BROWSER_USE_USER_DATA_DIR 为绝对路径;不设置则沿用既有目录,新路径不会自动迁移旧登录数据。

本地源码联调时,可将 file: 依赖写入 ~/.dsh/profiles/<profile>/package.json 并在 dsh.profile.bundles 中加入 dsh-parallel-browser,重装依赖并重启 DSH,确认 browser_use_* 工具出现。与市场在线安装不要同时加载新旧两份同名工具插件。

典型用法

智能体侧流程可归纳为:打开 → 快照 → 点击/输入 → 断言或截图。下面步骤与 README 工具表一致,参数以 DSH 工具 schema 为准。

  1. 打开目标页并取首个快照:
browser_use_open → 返回页面快照与可交互 ref 列表
  1. 若 DOM 已变化,重新快照后再操作:
browser_use_snapshot → 使用当次 ref
browser_use_click(ref) / browser_use_type(ref, text)
  1. 无需 ref 时向焦点处批量插入:
browser_use_insert_text
  1. 等待与校验:
browser_use_wait(加载/选择器/文本/URL)
browser_use_assert(至少一个非空条件)
  1. 保存现场图片:
browser_use_screenshot → 默认目录 $DSH_HOME/browser-use/screenshots,新文件名前缀 dsh-parallel-browser-
  1. 结束当前对话浏览器(其他对话不受影响):
browser_use_close

窗口卡住且需清空当前页状态时,使用 browser_use_reset(必须经用户明确确认);共享 Cookie 与存储仍保留。

适用场景与注意

适合:同一 DSH 实例下多对话并行查资料、填表、验收页面;需要共享站点登录又希望各对话页面互不覆盖;希望自动化在后台运行、少打扰当前桌面焦点。

慎用或需知:

  • 插件以当前 DSH 进程权限运行;安装前应阅读 MIT 许可证 与源码,勿同时跑多个 host 写同一用户数据目录。
  • 共享的是插件 Electron profile,不是系统 Chrome 账号或书签;多窗口同源登录态联动。
  • Windows 点标题栏 X 会销毁该对话窗口;最后一个原生窗口关闭后 host 退出并刷新共享存储。macOS 点 X 为隐藏,Cmd+Q 退出整个 host。
  • 从旧包名升级时,先结束页面任务,移除旧插件行再装 dsh-parallel-browser,避免重复注册 browser_use_*。
  • README 注明:macOS 真机回归较多;Windows 仍有实机复验项;真实 DSH UI 双对话验收待完成——生产使用前建议在目标平台自行验证。
  • 通过 SkillHub / dshmarket 更新时,以市场结果(如 applied、restart-required)为准;更新可能关闭活跃浏览器窗口。

结尾

dsh-parallel-browser 把「一对话一离屏窗、共享登录、CDP + 快照 ref、后台不抢焦点」做成一套 browser_use_* 工具,便于在 DSH 多对话场景里并行浏览。查阅安装与版本说明见 GitHub README,社区索引见 SkillHub 插件页。

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

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

Xiaoye