DeepSeek Harness 插件介紹:dsh-browser

前言

DeepSeek Harness(DSH)的插件生態旨在通過標準化的工具接入各類能力。在瀏覽器自動化領域,常見的方案如 Puppeteer 和 Playwright 基於瀏覽器調試協議(CDP)。雖然功能強大,但這些工具在啓動時會發出 Runtime.enable 等命令,容易暴露 navigator.webdriver 特徵,且默認使用全新空白 profile,極易觸發主流反爬廠商的驗證碼機制。

dsh-browser 插件旨在解決這一問題。它不依賴 Chrome 調試協議,通過 native messaging 讓擴展與 DSH 通信,將頁面轉換爲帶編號的文本清單交給模型,並利用 Chrome 的持久 profile 保留登錄態與歷史記錄,從而降低被識別爲自動化的風險。

核心功能

該插件通過以下方式實現瀏覽器控制:
* 不使用 CDP:不通過 --remote-debugging-port 啓動,而是使用擴展與 native messaging host 通信。
* 持久 Profile:Chrome 使用一個持久的獨立 profile,跨會話保留登錄態。
* 文本化交互:頁面以帶編號的文本形式呈現,不需要視覺模型進行截圖識別。
* 工具集:提供 browser_status, browser_open, browser_tabs, browser_select_tab, browser_close_tab, browser_snapshot, browser_text, browser_click, browser_fill, browser_press_key, browser_scroll, browser_navigate, browser_wait, browser_query, browser_hover, browser_upload, browser_screenshot, browser_evaluate, browser_console 等工具。

安裝與啓用

安裝與啓用過程包含三個主要步驟:安裝插件、配置連接組件、加載擴展並配對。

1. 安裝插件

在終端執行以下命令安裝插件:

dsh plugin --profile desktop add azazo1/dsh-browser

安裝完成後重啓 DSH。

2. 安裝連接組件

打開 設置 -> 插件 -> dsh-browser,點擊 安裝連接組件。這一步會:
1. 將擴展產物複製到 DSH 數據目錄。
2. 生成 native messaging 清單,寫入擴展 ID。
3. 生成啓動包裝腳本,寫死 node 絕對路徑(Chrome 直接 exec 它,不走 shell)。

清單文件寫入位置:
* macOS: ~/Library/Application Support/Google/Chrome/NativeMessagingHosts/
* Linux: ~/.config/google-chrome/NativeMessagingHosts/
* Windows: 註冊表 HKCU\Software\Google\Chrome\NativeMessagingHosts\

3. 手動加載擴展

由於 Chrome 版本限制,必須手動操作:
1. 打開 chrome://extensions,開啓開發者模式。
2. 點擊“加載已解壓的擴展程序”。
3. 選擇配置頁上顯示的擴展目錄。
4. 回到配置頁,狀態應變爲綠色。

注意:Chrome 154 之後禁用了命令行 --load-extension 參數,且從 33 起只接受商店或企業策略擴展,因此此步驟無法通過命令行完成。使用 unpacked 方式加載的擴展不會自動更新。

4. 配對令牌

dsh 與擴展之間通過配對令牌進行鑑權。沒有令牌時操作會被拒絕,而非降級放行。

  1. 在瀏覽器工具欄點擊 dsh Browser 圖標。
  2. 複製面板中的配對令牌。
  3. 在 DSH 設置 -> 插件 -> dsh-browser 中粘貼令牌並保存。
  4. 狀態應變爲“dsh 已接受配對”。

5. (可選) 開啓 Allow User Scripts

browser_evaluate 工具需要執行 JS 代碼,受 CSP 限制。需在擴展詳情頁手動打開 Allow User Scripts 開關(Chrome 138 之前需開啓右上角開發者模式)。若未開啓,該工具會報錯並建議使用 browser_query。

使用說明

安裝完成後,Agent 即可調用上述工具。使用時需注意以下規則:

工具分工

  • browser_snapshot:列出可見可交互元素並編號,用於操作。
  • browser_query:按 CSS 選擇器返回全部匹配項的文本與屬性,用於讀數。
  • browser_text:僅提取頁面正文。
  • browser_evaluate:執行 JS 表達式(需開啓 Allow User Scripts)。
  • browser_screenshot:僅截取當前視口並保存爲文件返回路徑,不直接傳給模型。

操作規則

  • 綁定標籤頁:所有操作只作用於被綁定的標籤頁。必須先調用 browser_select_tab。
  • 快照編號失效:頁面 DOM 結構變化後,上一次 browser_snapshot 生成的編號將失效。若操作過期的編號,工具會報錯,需重新獲取快照。

配置項

在 DSH 的 profile patch 層中配置 dsh-browser:

- id: dsh-browser
  config:
    # Chrome 可執行文件路徑(可選,默認探測穩定版)
    chromePath: /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
    # 持久 profile 目錄(可選,默認 <DSH_HOME>/data/dsh-browser/profile)
    profileDir: ~/chrome-for-dsh
    # 額外啓動參數(會拒絕 --remote-debugging-port, --headless 等參數)
    extraArgs: []
    # 是否在首次使用瀏覽器時徵求用戶同意
    askOnAcquire: true
    # 是否啓動獨立 profile 的 Chrome
    launchStandaloneChromeProfile: false

注意事項

  • 多會話衝突:瀏覽器平面是獨佔的。若兩個會話同時嘗試驅動,會觸發審批流程。
  • 權限拒絕:extraArgs 中包含的衝突參數(如 --remote-debugging-port)會被拒絕並在啓動時報錯。
  • 令牌管理:配對令牌直接寫入數據目錄的 pairing-token 文件(權限 0600),不參與配置文件同步。

總結

dsh-browser 通過繞過 CDP 協議和保留真實 Profile,爲 DSH 提供了一種更接近人工操作的瀏覽器控制方式。它適合需要在有登錄態、反爬檢測較嚴的環境下進行網頁交互的場景。

  • 插件目錄: https://www.skillhub.cn/plugins/azazo1/dsh-browser
  • GitHub: https://github.com/azazo1/dsh-browser
羽毛球分组比赛记分
小程序二维码

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

小夜