DeepSeek Harness 插件介绍:dsh-browser

前言

DeepSeek Harness(DSH)的插件生态旨在通过标准化的工具接入各类能力。在浏览器自动化领域,常见的方案如 Puppeteer 和 Playwright 基于浏览器调试协议(CDP)。虽然功能强大,但这些工具在启动时会发出 Runtime.enable 等命令,容易暴露 navigator.webdriver 特征,且默认使用全新空白 profile,极易触发主流反爬厂商的验证码机制。

dsh-browser 插件旨在解决这一问题。它不依赖 Chrome 调试协议,通过 native messaging 让扩展与 DSH 通信,将页面转换为带编号的文本清单交给模型,并利用 Chrome 的持久 profile 保留登录态与历史记录,从而降低被识别为自动化的风险。

核心功能

该插件通过以下方式实现浏览器控制:
* 不使用 CDP:不通过 --remote-debugging-port 启动,而是使用扩展与 native messaging host 通信。
* 持久 Profile:Chrome 使用一个持久的独立 profile,跨会话保留登录态。
* 文本化交互:页面以带编号的文本形式呈现,不需要视觉模型进行截图识别。
* 工具集:提供 browser_status, browser_open, browser_tabs, browser_select_tab, browser_close_tab, browser_snapshot, browser_text, browser_click, browser_fill, browser_press_key, browser_scroll, browser_navigate, browser_wait, browser_query, browser_hover, browser_upload, browser_screenshot, browser_evaluate, browser_console 等工具。

安装与启用

安装与启用过程包含三个主要步骤:安装插件、配置连接组件、加载扩展并配对。

1. 安装插件

在终端执行以下命令安装插件:

dsh plugin --profile desktop add azazo1/dsh-browser

安装完成后重启 DSH。

2. 安装连接组件

打开 设置 -> 插件 -> dsh-browser,点击 安装连接组件。这一步会:
1. 将扩展产物复制到 DSH 数据目录。
2. 生成 native messaging 清单,写入扩展 ID。
3. 生成启动包装脚本,写死 node 绝对路径(Chrome 直接 exec 它,不走 shell)。

清单文件写入位置:
* macOS: ~/Library/Application Support/Google/Chrome/NativeMessagingHosts/
* Linux: ~/.config/google-chrome/NativeMessagingHosts/
* Windows: 注册表 HKCU\Software\Google\Chrome\NativeMessagingHosts\

3. 手动加载扩展

由于 Chrome 版本限制,必须手动操作:
1. 打开 chrome://extensions,开启开发者模式。
2. 点击“加载已解压的扩展程序”。
3. 选择配置页上显示的扩展目录。
4. 回到配置页,状态应变为绿色。

注意:Chrome 154 之后禁用了命令行 --load-extension 参数,且从 33 起只接受商店或企业策略扩展,因此此步骤无法通过命令行完成。使用 unpacked 方式加载的扩展不会自动更新。

4. 配对令牌

dsh 与扩展之间通过配对令牌进行鉴权。没有令牌时操作会被拒绝,而非降级放行。

  1. 在浏览器工具栏点击 dsh Browser 图标。
  2. 复制面板中的配对令牌。
  3. 在 DSH 设置 -> 插件 -> dsh-browser 中粘贴令牌并保存。
  4. 状态应变为“dsh 已接受配对”。

5. (可选) 开启 Allow User Scripts

browser_evaluate 工具需要执行 JS 代码,受 CSP 限制。需在扩展详情页手动打开 Allow User Scripts 开关(Chrome 138 之前需开启右上角开发者模式)。若未开启,该工具会报错并建议使用 browser_query。

使用说明

安装完成后,Agent 即可调用上述工具。使用时需注意以下规则:

工具分工

  • browser_snapshot:列出可见可交互元素并编号,用于操作。
  • browser_query:按 CSS 选择器返回全部匹配项的文本与属性,用于读数。
  • browser_text:仅提取页面正文。
  • browser_evaluate:执行 JS 表达式(需开启 Allow User Scripts)。
  • browser_screenshot:仅截取当前视口并保存为文件返回路径,不直接传给模型。

操作规则

  • 绑定标签页:所有操作只作用于被绑定的标签页。必须先调用 browser_select_tab。
  • 快照编号失效:页面 DOM 结构变化后,上一次 browser_snapshot 生成的编号将失效。若操作过期的编号,工具会报错,需重新获取快照。

配置项

在 DSH 的 profile patch 层中配置 dsh-browser:

- id: dsh-browser
  config:
    # Chrome 可执行文件路径(可选,默认探测稳定版)
    chromePath: /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
    # 持久 profile 目录(可选,默认 <DSH_HOME>/data/dsh-browser/profile)
    profileDir: ~/chrome-for-dsh
    # 额外启动参数(会拒绝 --remote-debugging-port, --headless 等参数)
    extraArgs: []
    # 是否在首次使用浏览器时征求用户同意
    askOnAcquire: true
    # 是否启动独立 profile 的 Chrome
    launchStandaloneChromeProfile: false

注意事项

  • 多会话冲突:浏览器平面是独占的。若两个会话同时尝试驱动,会触发审批流程。
  • 权限拒绝:extraArgs 中包含的冲突参数(如 --remote-debugging-port)会被拒绝并在启动时报错。
  • 令牌管理:配对令牌直接写入数据目录的 pairing-token 文件(权限 0600),不参与配置文件同步。

总结

dsh-browser 通过绕过 CDP 协议和保留真实 Profile,为 DSH 提供了一种更接近人工操作的浏览器控制方式。它适合需要在有登录态、反爬检测较严的环境下进行网页交互的场景。

  • 插件目录: https://www.skillhub.cn/plugins/azazo1/dsh-browser
  • GitHub: https://github.com/azazo1/dsh-browser
羽毛球分组比赛记分
小程序二维码

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

Xiaoye