前言¶
在 DeepSeek Harness(DSH)裏讓模型「訪問某個網址」時,常見做法是 web_fetch 拉 HTML。需要登錄的站點,抓取結果往往是登錄頁或空殼,模型看不到你賬號裏纔有權限的內容。若改用瀏覽器自動化,又要單獨維護賬號密碼或 cookie 導出,風險和運維成本都偏高。
下面介紹社區插件 dsh-browser-takeover(維護者 L1818346,分類:聯網工具)。它不走憑據存儲:你在一隻帶 CDP 調試端口的獨立 Chromium 窗口裏正常登錄一次,插件維護「要登錄的網址」清單,Agent 訪問前先查清單,清單內優先用 web_open 在同一瀏覽器會話裏導航、按可見文字點擊入口;登錄態只依據會話 cookie 的名字判斷,cookie 值不離開宿主進程。
這是什麼¶
一句話定位:Browser session takeover for DSH——註冊需登錄的站點、檢查是否已登錄、打開登錄頁,並通過 web_open 按頁面可見文字導航或點擊;不保存任何賬號密碼。
倉庫:https://github.com/L1818346/dsh-browser-takeover
社區目錄:https://www.skillhub.cn/plugins/L1818346/dsh-browser-takeover
當前 package 版本爲 0.9.2,許可證 MIT。DSH 生態強調「一切皆插件」;SkillHub 目錄爲獨立社區站點,與 DeepSeek / 幻方無官方從屬關係。
核心功能¶
插件向 Agent 暴露兩類工具,並在系統提示里約定訪問網址的順序(見 src/prompt.js)。
| 能力 | 入口 | 說明 |
|---|---|---|
| 查清單 | web_sites |
零副作用:該 URL 是否在清單、對應瀏覽器此刻是否像已登錄;不啓動瀏覽器、不打開頁面 |
| 導航 / 按文字點擊 | web_open |
在帶調試端口的瀏覽器中打開地址,按可見文字匹配並點擊一個元素(含 iframe);一次調用最多點一個元素 |
| 網址清單 | 設置 → 瀏覽器網址接管 | 只存 URL 與添加時間 |
| 登錄狀態 | 同上 | 依據三層 cookie 表 + 兜底規則(src/session-cookies.js) |
| 打開登錄頁 | 同上 | 端口已開則新標籤;未開可按配置或參數拉起瀏覽器 |
Agent 訪問網址的推薦順序(插件加載後生效,改動需重啓 DSH Desktop):
- 先
web_sites({ url }); - 清單命中(
saved: true或同主機等匹配)→ 用web_open,不用web_fetch頂替登錄後內容; - 清單爲空時也可
web_open;新站點登錄後可remember: true記入清單。
web_open 返回裏始終帶有 site(匹配方式:完全一致 / 同主機 / 同域名提示)與 signIn(已登錄 / 可能已登錄 / 未登錄 / 端口未開時無法判斷)。
登錄判定分檔:已登錄(命中身份 cookie,如 user_session、SESSDATA、BDUSS 等)、可能已登錄(框架會話如 JSESSIONID 或兜底規則)、未登錄;匿名噪音 cookie(如 _gh_sess) deliberately 不計入,避免 GitHub 未登錄誤判。
安裝與啓用¶
要求:Node.js ≥ 20;Edge 或 Chrome(支持 --remote-debugging-port);peer 依賴 @deepseek-ai/dsh-tools(≥0.1.0-rc.7,可選)。
官方 README 給出的安裝步驟如下(不是 dsh plugin add 一行命令):
git clone git@github.com:L1818346/dsh-browser-takeover.git
cd dsh-browser-takeover
node scripts/install-dev.mjs # 用 junction 掛進 desktop profile 並註冊 bundle
然後重啓 DSH Desktop(插件樹與系統提示在進程啓動時組裝)。裝好後網址清單爲空,不預置任何站點。
插件以當前 DSH 進程權限運行;安裝前請自行查看源碼與 MIT 許可證條款。
瀏覽器與配置¶
插件不讀取你日常瀏覽器默認 profile(Chromium 136 起默認 profile 禁止開調試端口;換路徑又可能因 App-Bound Encryption 讀不到已登錄 cookie)。需要獨立 user-data-dir + 調試端口,默認 9333。
Windows 可用倉庫腳本啓動 Edge 獨立 profile(~/.dsh/edge-watch)並打開調試端口:
scripts\start-edge-debug.cmd
等價命令示例:
msedge.exe --remote-debugging-port=9333 --user-data-dir="%USERPROFILE%\.dsh\edge-watch"
在該窗口完成各站點登錄後,插件複用同一會話。
配置文件 ~/.dsh/browser.json:
{
"browserPort": 9333,
"launchBrowser": true
}
| 鍵 | 默認 | 說明 |
|---|---|---|
browserPort |
無 | 調試端口;工具參數 browserPort 優先,其次此文件,最後 9333 |
launchBrowser |
false |
端口未開時,是否允許插件自行拉起瀏覽器 |
網址清單文件:~/.dsh/browser-takeover-sites.json(僅 URL 與時間戳,初始爲空)。
典型用法¶
先做查清單,再打開或點擊;新站登錄後可用 remember 寫入清單。
// 1. 先查:這條網址存過沒有?(零成本)
web_sites({ url: "https://hdu.fanya.chaoxing.com/portal" })
// 2. 再開:清單裏的網址走插件瀏覽器(帶登錄態)
web_open({ url: "https://hdu.fanya.chaoxing.com/portal", match: "學習空間" })
// 3. 需要登錄的新站點:先登錄,再記進清單
web_open({ url: "https://example.com/app", match: "我的課程", remember: true })
// 4. 端口沒開時,讓插件自己拉起瀏覽器再打開
web_open({ url: "https://example.com/app", launch: true })
// 5. 只列候選、不點擊
web_open({ match: "國家安全教育", listOnly: true })
// 6. 同名元素多個時用 index
web_open({ match: "國家安全教育", index: 0 })
文字匹配規則:完全相同 > 以它開頭 > 包含;<a> 在平手時優先。匹配不到會列出候選,不猜測。
適用場景與注意¶
適合:校內學習平臺、需登錄的 SaaS、任何「你在瀏覽器裏已登錄、希望 Agent 點進具體入口而不是抓靜態 HTML」的工作流。
注意:
- 不做循環點擊、不批量爬取;
window.open彈窗可能被攔截,<a href>會直接導航。 - 端口未開時登錄態爲「無法判斷」,不是「未登錄」。
- 某站已登錄卻顯示未登錄:將該站身份 cookie 名加入
src/session-cookies.js的IDENTITY_COOKIES(倉庫提供npm test驗證)。 - 升級插件後需重啓 DSH Desktop,工具與提示詞纔會重新組裝。
常見故障:no-debug-port → 運行啓動腳本或 web_open({ …, launch: true });Agent 未先查清單 → 重啓 DSH Desktop。
結尾¶
dsh-browser-takeover 把「要登錄的網址」清單、web_sites 預檢和 web_open 導航串成一條可復現路徑:不存密碼,複用你在獨立調試瀏覽器裏的會話,讓 Agent 在聯網任務裏優先走真實登錄態頁面而非 web_fetch 的登錄頁快照。