前言¶
在 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 的登录页快照。