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 的登录页快照。

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

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

小夜