前言¶
在 DeepSeek Harness(DSH)里让智能体操作网页,常见做法是自行拼装 HTTP 抓取或零散脚本:能拿到 HTML,却难以稳定处理登录态、多标签、动态渲染和可交互控件。另一类做法是接第三方浏览器 API,但绑定和生命周期往往与 DSH 工具注册、会话清理脱节。
下面介绍社区插件 dsh-playwright-browser(维护者 Clizo1209,SkillHub 分类:联网工具)。它基于 Playwright,向 DSH 注册一组原生 browser_* 工具,提供可复用的浏览器上下文、语义化定位和多标签管理。行为设计参考 Codex Browser skill 的思路,但不依赖 OpenAI 浏览器绑定,控制器由插件自行管理。
DSH 目前处于开发者预览阶段。该插件针对 DSH
0.1.0-rc.6包线测试,随 DSH 演进可能需要兼容性更新。
这是什么¶
dsh-playwright-browser 是面向 DeepSeek Harness 的浏览器自动化插件,当前 npm 版本为 0.1.3,采用 MIT 许可证。
插件在 DSH 工具注册表中挂载十个 browser_* 工具,由 Cordis 管理浏览器生命周期。智能体通过语义定位器(如 role=button|Save、label=Email)与页面交互,并在操作后获取有界长的无障碍树或可见文本快照,而不是在页面内执行任意 JavaScript。
核心功能¶
工具一览¶
插件注册以下十个工具:
| 工具 | 作用 |
|---|---|
browser_open |
打开标签页,可选导航到 URL |
browser_navigate |
在已有标签页中导航 |
browser_snapshot |
读取有界长的无障碍或文本快照 |
browser_click |
点击语义化目标 |
browser_fill |
替换输入框内容,可选按 Enter |
browser_press |
发送 Playwright 键盘按键 |
browser_wait |
等待目标、URL 或加载状态 |
browser_history |
后退、前进或刷新 |
browser_screenshot |
保存 PNG 并返回绝对路径 |
browser_tabs |
列出、选择或关闭标签页 |
定位与快照¶
推荐的目标写法包括:
role=button|Save
button|Save
label=Email
placeholder=Search
text=Settings
testid=submit
css=#legacy-button
交互后会返回新鲜、有界长的快照(默认上限 40000 字符),便于智能体在动作前后核对页面状态。
浏览器与运行时¶
- 惰性启动浏览器;无 Playwright Chromium 时可回退到本机已安装的 Chrome 或 Edge。
- 可复用浏览器上下文,标签页使用稳定标识符。
- 支持后退、前进、刷新、键盘输入、等待和 PNG 截图。
- 页面操作支持中止;Cordis 负责生命周期清理。
- 不在页面内执行任意 JavaScript 求值。
安全模型¶
插件将页面内容视为不可信数据,而非智能体指令。涉及提交表单、敏感数据、下载、购买、权限变更、账户修改或 CAPTCHA 时,需获得适当用户授权。浏览器不会在未告知的情况下静默安装;无可用浏览器时,智能体应说明最低配置并征得同意。含嵌入凭据的 URL 会被拒绝;协作关闭标签页会取消该页面上进行中的操作。
环境要求¶
安装前确认:
- Node.js
^22.19.0或>=24.0.0 - 已配置 DSH profile
- 至少一种受支持浏览器:
- Playwright Chromium(
npx playwright install chromium) - Google Chrome / Microsoft Edge
- 或通过
executablePath指定可执行文件路径
安装与启用¶
从 npm 安装到 web profile:
dsh plugin --profile web add dsh-playwright-browser
从源码 checkout 安装:
npm install
npm pack
dsh plugin --profile web add ./dsh-playwright-browser-0.1.3.tgz
无头环境可使用 headless profile:
dsh plugin --profile headless add ./dsh-playwright-browser-0.1.3.tgz
安装后在不启动进程的情况下校验 profile 组合:
dsh --profile web --dump-config
Git 安装会执行包的 prepare 脚本;pnpm 10 及以上可能需要在 profile 的 pnpm-workspace.yaml 中显式允许该构建。使用预构建 npm 包或 tarball 时,profile 内无需再编译源码。
配置¶
在 profile 的 cordis.patch.yml 中追加配置(DSH 会在已安装 bundle 补丁之后应用用户覆盖):
- id: playwright-browser
config:
browser: chromium
channel: chrome
headless: true
viewportWidth: 1440
viewportHeight: 900
screenshotDir: .dsh-browser/screenshots
常用选项:
| 选项 | 默认值 | 说明 |
|---|---|---|
browser |
chromium |
chromium、firefox 或 webkit |
headless |
true |
是否无头运行 |
channel |
— | Chromium 渠道,如 chrome 或 msedge |
executablePath |
— | 浏览器可执行文件绝对路径 |
userDataDir |
— | 专用自动化用户数据目录 |
viewportWidth |
1280 |
视口宽度 |
viewportHeight |
800 |
视口高度 |
actionTimeoutMs |
15000 |
定位与操作超时 |
navigationTimeoutMs |
30000 |
导航超时 |
maxSnapshotChars |
40000 |
快照最大返回长度 |
screenshotDir |
.dsh-browser/screenshots |
截图输出目录 |
不要将 userDataDir 指向个人日常使用的浏览器配置目录,应使用专用于智能体自动化的独立目录。
典型用法¶
智能体在 DSH 会话中按任务链调用 browser_* 工具。一个常见的浏览流程如下:
- 用
browser_open打开标签页并导航到目标 URL。 - 用
browser_snapshot读取当前页面结构,确认可交互元素。 - 用
browser_click、browser_fill或browser_press完成操作;目标使用语义定位器,例如label=Email或button|Save。 - 用
browser_wait等待 URL、元素或加载状态就绪。 - 需要留档时调用
browser_screenshot;多页任务用browser_tabs管理标签,用browser_history处理后退与刷新。
定位器示例:
role=button|Save
label=Email
placeholder=Search
text=Settings
适用场景与注意¶
适合谁
- 已在 DSH 中编排智能体,需要稳定、可观测的网页自动化能力。
- 希望用无障碍树和语义定位减少脆弱 CSS 选择器依赖的团队。
- 需要多标签、截图、导航历史等完整浏览器会话管理的场景。
使用前注意
- 插件以当前 DSH 进程的权限运行,可访问其能触及的文件、网络与浏览器数据。安装前应阅读 GitHub 仓库 源码与 MIT 许可证,评估是否满足你的安全与合规要求。
- SkillHub 为社区目录站点,与 DeepSeek / 幻方无官方从属关系;插件列表与星标(当前 GitHub 11 stars)反映社区维护状态,不代表官方背书。
- DSH 仍在快速迭代,升级 DSH 或插件版本后建议执行
dsh --profile web --dump-config并跑一遍你的典型任务链。
链接¶
- SkillHub 目录页:https://www.skillhub.cn/plugins/Clizo1209/dsh-playwright-browser
- GitHub 仓库:https://github.com/Clizo1209/dsh-playwright-browser
经过上面的步骤,你可以在 DSH profile 中接入 Playwright 驱动的浏览器工具集,让智能体以结构化快照和语义定位完成多标签网页任务,而不必自行维护浏览器控制器与工具注册。