dsh-browser-takeover:在已登錄瀏覽器裏替 Agent 打開網址

前言

在 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):

  1. 先 web_sites({ url });
  2. 清單命中(saved: true 或同主機等匹配)→ 用 web_open,不用 web_fetch 頂替登錄後內容;
  3. 清單爲空時也可 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 的登錄頁快照。

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

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

小夜