用 dsh-playwright-browser 給 DeepSeek Harness 接上 Playwright 瀏覽器

前言

DeepSeek Harness(以下簡稱 DSH)把模型、工具、會話和 UI 都做成插件,官方口號是「一切皆插件」。開發者預覽版裏,智能體已經能讀寫文件、跑 Shell、做普通網頁抓取,但這些還不夠覆蓋一類很常見的任務:打開真實瀏覽器、讀渲染後的頁面、點按鈕、填表單、在多個標籤頁之間切換。

內置的 HTTP 抓取只能拿到靜態響應。頁面如果依賴 JavaScript 渲染,或者操作必須發生在瀏覽器裏(登錄後的後臺、多步表單、需要等待加載的列表),智能體就需要一個持久的瀏覽器控制器,而不是一次性的 curl。社區裏已經出現多款 Playwright 插件,本文介紹的是 Clizo1209 維護的 dsh-playwright-browser:它把 10 個 browser_* 工具註冊進 DSH 工具表,用語義定位驅動頁面,而不是讓模型去猜一長串 CSS。

需要先說明兩點。第一,DSH 目前仍是開發者預覽,插件作者寫明已針對 0.1.0-rc.6 包系列做過測試,後續核心 API 仍可能不兼容。第二,DeepSeek Harness 插件庫是社區目錄站點,和 DeepSeek / 幻方沒有官方從屬關係,不要把它當成官方應用商店。

這是什麼

dsh-playwright-browser 是一款面向 DSH 的 Playwright 瀏覽器自動化插件,由 GitHub 用戶 Clizo1209 維護,倉庫地址爲 Clizo1209/dsh-playwright-browser。目錄頁把它歸在「界面增強」,許可證爲 MIT,主要語言是 TypeScript。npm 上當前發佈版本是 0.1.3(2026-08-14),GitHub 倉庫當前 8 星。

它解決的問題可以概括成一句話:給 DSH 智能體一個可複用的瀏覽器上下文,讓它用 accessibility 快照和語義定位去操作頁面,而不是把整頁 DOM 塞進上下文,也不提供任意 JavaScript eval

README 寫明:行爲設計參考了 Codex Browser 技能,但不包含 Codex 運行時代碼,也不依賴 OpenAI 的瀏覽器綁定。項目文檔 docs/CODEX_BROWSER_DESIGN.md 把這一點寫得很清楚——只映射「持久綁定、顯式標籤頁、語義點擊、事後再觀察」這類交互原則,瀏覽器進程由插件自己用 Playwright 拉起。

核心功能

十個原生 browser_* 工具

插件向 DSH 工具註冊表掛上 10 個模型可調用工具,名稱和職責以倉庫 README 爲準:

工具 作用
browser_open 打開標籤頁,可同時導航到 URL
browser_navigate 在已有標籤頁裏導航
browser_snapshot 讀取有長度上限的 accessibility 或可見文本快照
browser_click 點擊語義目標
browser_fill 替換輸入框內容,可選按 Enter
browser_press 發送 Playwright 鍵盤按鍵
browser_wait 等待目標、URL 或加載狀態
browser_history 後退、前進或刷新
browser_screenshot 保存 PNG,返回絕對路徑
browser_tabs 列出、選擇或關閉標籤頁

架構文檔把調用鏈寫得很短:profile 的 cordis.patch.yml 掛上插件入口,入口再往工具表和系統提示詞裏各貢獻一塊,真正驅動瀏覽器的是內部的 BrowserController。控制器按需啓動瀏覽器,標籤頁用單調遞增的 tab-N 作爲穩定 ID。

語義定位,CSS 只作退路

頁面交互優先用語義字符串,而不是讓模型拼選擇器。README 給出的推薦格式如下:

role=button|保存
button|保存
label=郵箱
placeholder=搜索
text=設置
testid=submit
css=#legacy-button

role=button|保存 和快照友好的簡寫 button|保存 是同一類定位。CHANGELOG 裏 0.1.3 專門加了這種 | 簡寫,原因是實測裏智能體經常從 accessibility 快照裏直接抄出 textbox|Name 這種寫法,舊版解析失敗。CSS 仍然可用,但文檔把它標成兼容出口。

每次打開、導航或改頁面之後,工具會返回一份新的、有長度上限的快照(默認最多 40000 字符)。系統提示詞要求智能體把頁面內容當成不可信數據,先觀察再動手,動手後再觀察一遍。

懶啓動、回退瀏覽器、統一清理

瀏覽器不是插件一加載就啓動。第一次真正調用瀏覽器工具時,控制器纔會按配置拉起進程。未指定 channel / executablePath 時,Chromium 的嘗試順序是:

  1. Playwright 管理的 Chromium
  2. 本機已安裝的 Google Chrome
  3. 本機已安裝的 Microsoft Edge

顯式配置的 channelexecutablePath 優先。Firefox 和 WebKit 需要對應的 Playwright 瀏覽器,或給出可執行文件路徑。Playwright Chromium 可以用下面這條命令安裝:

npx playwright install chromium

Cordis 卸載插件時會關掉頁面、上下文和瀏覽器進程。關閉某個標籤頁時,會協作式取消該頁上尚未完成的操作。插件聲明不提供任意頁面 JavaScript 求值,這是和部分社區瀏覽器插件的明顯差別。

安裝與啓用

社區目錄頁給出的安裝命令是:

dsh plugin add github:Clizo1209/dsh-playwright-browser

這條命令以目錄頁原文爲準。dsh CLI 會從 GitHub 解析插件並裝進當前配置。若需要可復現安裝,目錄頁建議固定 commit 哈希:

dsh plugin add github:Clizo1209/dsh-playwright-browser#commit

commit 換成實際哈希即可。

倉庫 README 另外提供了 npm 安裝方式,適合已經指定 profile 的場景。當前包名與版本爲 dsh-playwright-browser@0.1.3

dsh plugin --profile web add dsh-playwright-browser

從源碼目錄打包再裝:

npm install
npm pack
dsh plugin --profile web add ./dsh-playwright-browser-0.1.3.tgz

無界面 profile 可以把 web 換成 headless。裝完後可以用下面的命令檢查組合配置,不必真正啓動會話:

dsh --profile web --dump-config

Git 安裝會跑包裏的 prepare 腳本(即 TypeScript 構建)。README 提醒:pnpm 10 及以上可能要在該 profile 的 pnpm-workspace.yaml 裏明確允許這次構建;預編譯的 npm 包或 tarball 不需要在 profile 裏再編一遍源碼。

環境要求也寫在 README 裏:Node.js ^22.19.0>=24.0.0,以及一個可用的 DSH profile。瀏覽器三選一即可:Playwright Chromium、系統 Chrome / Edge,或配置 executablePath

目錄頁和插件安全說明都強調:插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。 安裝前應檢查源代碼倉庫和許可證。

配置與用法

DSH 會在已安裝的 bundle 補丁之後再應用用戶覆蓋。把類似下面的一行加進該 profile 的 cordis.patch.yml(倉庫 examples/cordis.patch.yml 與 README 一致):

- id: playwright-browser
  config:
    browser: chromium
    channel: chrome
    headless: true
    viewportWidth: 1440
    viewportHeight: 900
    screenshotDir: .dsh-browser/screenshots

README 列出的配置項如下(未寫出的項沿用默認值):

配置項 默認值 用途
browser chromium chromiumfirefoxwebkit
headless true 是否無頭運行
channel chromemsedge 等 Chromium channel
executablePath 瀏覽器可執行文件的絕對路徑
userDataDir 給智能體專用的持久化目錄
viewportWidth 1280 視口寬度
viewportHeight 800 視口高度
actionTimeoutMs 15000 定位和操作超時
navigationTimeoutMs 30000 導航超時
maxSnapshotChars 40000 快照最大字符數
screenshotDir .dsh-browser/screenshots 截圖目錄

不要把 userDataDir 指到自己日常使用的瀏覽器配置目錄。文檔要求使用智能體專用目錄;插件也不會去翻個人瀏覽器的 cookie、密碼或擴展狀態。

裝好之後,這些工具會進入當前會話的工具表,由模型按任務調用,而不是你在終端裏一條條敲 browser_click。一條符合文檔設計的操作順序是:

  1. browser_open 打開頁面(或 browser_navigate 跳轉到已有標籤)
  2. 閱讀返回的快照,確認可見控件
  3. role= / label= / text= 等形式 browser_clickbrowser_fill
  4. 需要時 browser_wait,或 browser_screenshot 留證
  5. 多頁面任務用 browser_tabs 切換,用完再關閉

截圖會寫成本地 PNG,工具返回絕對路徑。DSH 各條模型路由對圖片附件的支持不一樣,調用方可以把這條路徑交給已有的讀圖工具。

適用場景與注意事項

適合在 DSH 裏做這類工作的人:要讓智能體操作 JavaScript 渲染後的頁面、走多步表單、在多個標籤間對照信息,或者需要截圖作爲操作證據。它不是完整的網頁安全沙箱。架構文檔寫得很直接:這是瀏覽器自動化,運維仍要按自己的環境加上出口、代理、文件系統和賬號控制。

使用前值得逐條覈對的邊界:

  • 只接受 http:https:about: 導航,帶嵌入式用戶名或密碼的 URL 會被拒絕。
  • 頁面正文是觀察數據,不是給智能體的指令。
  • 涉及憑據、下載、購買、權限彈窗、賬號變更和 CAPTCHA 時,文檔要求先獲得適當授權。
  • 插件不會在後臺默默下載瀏覽器;環境缺失時先說明最小安裝步驟,未授權不得改機器。
  • 截圖和日誌可能帶上頁面內容,需要按敏感數據處理。
  • 在項目到達 1.0 之前,安全修復只覆蓋最新發布的 0.x。當前倉庫最新發布是 0.1.3

DSH 本身還在快速迭代,插件作者也標明可能要跟着核心版本做兼容更新。安裝社區插件前,建議打開 GitHub 倉庫看一眼 LICENSESECURITY.mdsrc/,確認許可證(MIT)和權限模型可以接受。

小結

dsh-playwright-browser 給 DSH 補上的是一套語義化、多標籤、可取消的 Playwright 控制面:10 個 browser_* 工具、有上限的 accessibility 快照、Chrome / Edge 回退,以及明確不做頁面 eval。它是 Clizo1209 維護的社區 MIT 項目,不是 DeepSeek 官方捆綁能力。

目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-playwright-browser/

GitHub:https://github.com/Clizo1209/dsh-playwright-browser

npm:https://www.npmjs.com/package/dsh-playwright-browser

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

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

小夜