前言¶
在 DeepSeek Harness(DSH)裏做聯網或頁面相關任務時,模型往往需要「看見頁面、點按鈕、填表單」。常見做法是外掛 Playwright、用 CDP,或讓模型猜 CSS 選擇器——這些路徑要麼和 Harness 右欄內置瀏覽器脫節,要麼定位依據不穩定。社區插件 dsh-browser-control 由維護者 neilweixing 提供,分類爲「聯網工具」,目標是讓模型像 ZCode 那樣操作 Harness 內置側邊瀏覽器(右欄 Browser 標籤頁):以 ARIA 快照作爲定位器唯一依據,用受信任輸入觸發真實交互,並返回真實截圖。
這是什麼¶
dsh-browser-control 是一組註冊到 DSH 模型工具表裏的 browser_* 工具集。它不替代 CDP 或無頭瀏覽器,而是專門綁定 Harness 窗口內 <webview> 承載的頁面:觀察來自頁內代理計算的無障礙樹,每個 ref 對應一次快照裏真實存在的元素;點擊與按鍵走 sendInputEvent,在元素視口座標上觸發,而不是 el.click()。
與「枚舉前 N 個鏈接」式自動化相比,README 強調三件事:觀察是無障礙樹快照;每個 ref 綁定被觀察到的元素;輸入是受信任的底層事件。
核心功能¶
工具一覽¶
安裝並刷新 Harness 後,下列工具出現在模型工具表中(作用摘自官方 README):
| 工具 | 作用 |
|---|---|
browser_open |
打開頁面或導航已有標籤頁;mode: "same-site" 可複用同域標籤頁 |
browser_tabs |
列出本會話瀏覽器標籤頁(URL、標題、加載狀態、是否掛載) |
browser_close |
關閉一個標籤頁 |
browser_nav |
back / forward / reload / stop |
browser_snapshot |
無障礙樹,每行一個節點:role、可訪問名、狀態、ref |
browser_locator |
只檢查定位器:匹配數量與目標;用於確認存在與讀取當前狀態 |
browser_act |
一次一個改狀態動作:click / dblclick / hover / fill / type / press / select / check / uncheck / focus / scroll |
browser_read |
讀可見文本:整頁或某個元素 |
browser_wait |
等待定位器狀態、可見文本、URL、加載狀態 |
browser_console |
讀取 console、未捕獲錯誤、頁面嘗試彈出的原生對話框 |
browser_screenshot |
真實截圖,作爲圖片返回 |
觀察與動作的節奏¶
browser_act 每次只執行一個動作並返回結果。下一步應先再觀察:查單個元素時優先 browser_locator(最便宜);需要新的定位依據時再 browser_snapshot。頁面變化後,舊 ref 會被明確拒絕(stale-ref / detached),不會靜默點到別的元素。
定位器優先級¶
README 給出的匹配順序如下:
{ "ref": "e12" }—— 精確,來自最新快照{ "role": "button", "name": "保存" }—— 頁面自述{ "testid": "submit-order" }—— 有測試 id 時較穩{ "label": "郵箱" }/{ "placeholder": "搜索" }—— 表單字段{ "css": "..." }—— 兜底,僅在樹裏確實沒有可用 role/name 時
匹配到多個元素會報錯並要求收緊定位,而不是用 nth 猜位置。
快照示例¶
無障礙樹以緊湊縮進樹形式返回,隱藏元素(display:none、aria-hidden 等)不出現。示意結構與 README 一致:
- navigation "Main" [ref=e1]
- link "Home" [href=/home] [ref=e2]
- heading "Products" [level=2] [ref=e4]
- region "Filters" [ref=e5]
- textbox "Search products" [placeholder="Type to search"] [ref=e6]
- button "Apply" [testid="apply"] [ref=e10]
架構簡述¶
命令路徑爲:模型調用 browser_*(Host 半)→ Connection RPC 長輪詢 → Client 半(頁面內)→ 右欄 Browser 的 <webview> → 頁內代理 → 結果(含截圖字節)回傳。Connection RPC 爲瀏覽器到 Host 的單向設計;命令按 Session 隔離;目標定位使用 Harness 內置標記(如 data-sidebar-right-tab、webview[data-sidebar-browser-frame])與會話元數據,每次調用重新解析目標,避免導航或重載後句柄失效。
安裝與啓用¶
插件通過插件管理器從本地包目錄安裝,README 給出的命令爲:
# 插件管理器,參數爲本地包目錄的絕對路徑
plugin_manager install_bundle /絕對路徑/dsh-browser-control
將 /絕對路徑/dsh-browser-control 換成本地插件包目錄的絕對路徑。安裝後刷新 Harness 頁面,讓 Client 半加載,工具纔會進入模型工具表。改完 index.js / client.js 後,需在插件管理器中移除再安裝,然後再次刷新。
當前倉庫 package.json 標註版本爲 2.0.0,許可證爲 MIT。
典型用法思路¶
下面是一套可復現的節奏(具體 URL 與頁面內容由你的任務決定):
- 用
browser_open在側邊瀏覽器打開目標 https 頁面。 - 用
browser_snapshot或browser_wait等待加載完成並取得樹與ref。 - 用
browser_locator確認要操作的節點存在且唯一。 - 用
browser_act執行一個動作(例如click或fill)。 - 頁面變化後重新快照或 locator,再執行下一步;需要視覺確認時調用
browser_screenshot。 - 調試腳本問題時可用
browser_console查看日誌與原生對話框嘗試。
插件只接受 http/https,禁止內嵌憑據與指向 Harness 自身地址;頁面內容在工具描述與運行時 skill 中一律視爲不可信數據。
適用場景與注意¶
適合:在 DSH 會話內讓模型操作右欄 Browser、做表單填寫、導航、讀可見文本、截屏佐證,且希望定位與 ZCode 類「樹 + ref + 單步動作」流程一致的場景。
不適合或做不到(README「已知限制」):
- 不是 CDP:無後臺標籤、網絡攔截、無頭模式;能力限於
<webview>的executeJavaScript/sendInputEvent/capturePage。 - 截圖要求 Harness 窗口可見,否則
capturePage不返回,插件會快速失敗並說明原因。 - 不支持文件上傳與下載;
file:頁面被拒。 alert/confirm/prompt被拒絕,記錄到browser_console並以安全默認值應答。
DSH 生態理念是「一切皆插件」;SkillHub 目錄頁 爲社區站點,與 DeepSeek / 幻方無官方從屬關係。插件在當前 DSH 進程權限下運行,安裝前請自行查閱 GitHub 源碼 與 MIT 許可證,確認符合你的安全與合規要求。
結尾¶
dsh-browser-control 把 Harness 側邊瀏覽器變成可編排的工具面:無障礙樹作定位 ground truth、單步 browser_act、受信任輸入與真實截圖,適合在 Harness 內完成頁面任務而不另起一套瀏覽器自動化棧。