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 插件頁。

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

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

小夜