DeepSeek Harness Plugin: Yandex Browser

前言

在 DeepSeek Harness(DSH)环境中,智能体在浏览器中的操作通常基于一次性配置文件。每次运行都是一个全新的浏览器实例,没有 Cookies、没有已登录状态,也无法使用个人安装的扩展程序。这导致智能体无法访问需要身份验证的页面,也无法复用已配置的环境。

本插件通过提供持久化的 Yandex Browser 配置文件以及基于 Chrome DevTools Protocol(CDP)的页面控制能力,解决了这一问题。它允许智能体在同一个浏览器实例中工作,且配置文件中的登录状态和扩展可以长期保留。

这是什么

这是一个 DeepSeek Harness 插件,由用户 DmitPerson42 维护。其核心功能是启动一个带有持久化配置文件的 Yandex Browser,并在端口 9222 上开启 CDP 通信,从而让智能体能够直接读取和操作页面内容。

插件不依赖 MCP(Model Context Protocol),而是直接通过 CDP 与浏览器交互。它主要包含三个模块:yandex_browser(管理生命周期)、yandex_page(读取内容)和 yandex_act(执行动作)。

核心功能

插件通过 CDP 协议(默认端口 9222)与浏览器通信,配置文件存储在 %USERPROFILE%\.dsh\browsers\yandex。

  1. yandex_browser:生命周期管理

    • status:检查浏览器运行状态、版本、端点地址、配置文件路径及当前打开的标签页。
    • start:启动浏览器。如果浏览器已运行,此命令会跳过启动过程。
    • open:在浏览器中打开指定 URL。如果浏览器未启动,会自动先启动。
    • login:打开登录页面(默认为 Yandex Passport),供用户手动输入凭据。
    • tabs:列出当前所有打开的标签页。
    • close:关闭浏览器。注意:这会关闭所有标签页,但会保留配置文件中的登录状态。
  2. yandex_page:页面读取

    • text:获取页面文本,并附带交互元素(基于 aria-label、title、placeholder)的描述,便于识别复杂的 Web 组件。
    • eval:在页面上下文中执行 JavaScript 表达式并返回结果。
    • screenshot:保存页面截图。支持 fullPage 参数以截取完整页面。
    • tabs:返回标签页 ID 列表,并标记出由插件创建的标签页。
  3. yandex_act:页面操作

    • navigate:跳转 URL。
    • click:通过 CSS 选择器或可见文本点击元素。
    • type:在输入框中输入文本(支持 React 表单),可配置是否发送回车。
    • key:模拟按键(Enter, Tab, Escape, 方向键等)。
    • activate:激活并显示特定标签页。
    • close / close_created:关闭指定标签页或关闭所有由插件自动创建的标签页。
    • wait:等待指定元素出现。

安装与启用

通过 CLI 安装插件:

dsh plugin --profile web add github:DmitPerson42/dsh-yandex-browser

安装完成后,需要修改配置文件以启用插件。插件通过 dsh.bundle.patch 宣告自身,并依赖 cordis.patch.yml 来注入配置。

在 ~/.dsh/profiles/web/cordis.patch.yml 中添加以下内容(需根据实际环境调整路径):

- insert:
    - id: yandex-browser
      name: "file:///<你的用户目录>/.dsh/plugins/dsh-yandex-browser/lib/index.js"
      config:
        autoStart: true

配置项说明:
* autoStart:设置为 true 可在插件加载时自动启动浏览器,确保后续命令可用。
* cdpEndpoint:默认为 http://localhost:9222(必须使用 localhost 而非 127.0.0.1)。
* profileDir:默认为 %USERPROFILE%\.dsh\browsers\yandex。
* tabStateFile:记录插件创建的标签页 ID,用于后续清理。

典型用法

一次典型的操作流程如下:

  1. 检查浏览器状态:yandex_browser action: "status"。
  2. 打开目标页面:yandex_browser action: "open" url: "https://..."。
  3. 读取页面内容以理解当前状态:yandex_page action: "text"。
  4. 执行点击或输入操作:yandex_act action: "click" selector: "..." 或 yandex_act action: "type" selector: "..." value: "..."。

关于登录:
插件本身不会自动输入密码。智能体需要调用 yandex_browser action: "login",在弹出的浏览器窗口中由用户手动输入账号密码。为了保持会话,建议勾选“记住我”。

关于标签页清理:
插件创建的标签页是临时的“垃圾数据”。在任务结束后,必须调用 yandex_act action: "close_created" 来关闭所有由智能体打开的标签页,以保持环境整洁。

适用场景与注意

该插件适合需要在浏览器环境中进行长期会话操作、需要复用已登录状态或使用特定扩展的 DSH 场景。

使用前请注意以下事实:
* 权限要求:插件以当前 DSH 进程的权限运行,请确保配置文件目录有写入权限。
* 本地回环:CDP 连接必须使用 localhost(支持 IPv4/IPv6 双栈),直接使用 127.0.0.1 可能因浏览器绑定地址不同而失败。
* JS 语法限制:在 cordis.patch.yml 的 args 中,!!js 语法不会被解析。MCP 服务器配置(如 CDP 端点)需使用字符串字面量,不能使用环境变量拼接。
* 源码审查:插件使用 MIT 许可证,但在生产环境使用前,建议审查源码以确保符合安全要求。

结语

通过使用该插件,DSH 智能体获得了在真实浏览器环境中工作的能力,结合持久化配置文件,能够更自然地处理需要登录、扩展或复杂交互的任务。

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

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

Xiaoye