前言¶
DeepSeek Harness(以下简称 DSH)把模型、工具、会话和 UI 都做成插件,官方口号是「一切皆插件」。开发者预览版里,智能体已经能读写文件、跑 Shell、做普通网页抓取,但这些还不够覆盖一类很常见的任务:打开真实浏览器、读渲染后的页面、点按钮、填表单、在多个标签页之间切换。
内置的 HTTP 抓取只能拿到静态响应。页面如果依赖 JavaScript 渲染,或者操作必须发生在浏览器里(登录后的后台、多步表单、需要等待加载的列表),智能体就需要一个持久的浏览器控制器,而不是一次性的 curl。社区里已经出现多款 Playwright 插件,本文介绍的是 Clizo1209 维护的 dsh-playwright-browser:它把 10 个 browser_* 工具注册进 DSH 工具表,用语义定位驱动页面,而不是让模型去猜一长串 CSS。
需要先说明两点。第一,DSH 目前仍是开发者预览,插件作者写明已针对 0.1.0-rc.6 包系列做过测试,后续核心 API 仍可能不兼容。第二,DeepSeek Harness 插件库是社区目录站点,和 DeepSeek / 幻方没有官方从属关系,不要把它当成官方应用商店。
这是什么¶
dsh-playwright-browser 是一款面向 DSH 的 Playwright 浏览器自动化插件,由 GitHub 用户 Clizo1209 维护,仓库地址为 Clizo1209/dsh-playwright-browser。目录页把它归在「界面增强」,许可证为 MIT,主要语言是 TypeScript。npm 上当前发布版本是 0.1.3(2026-08-14),GitHub 仓库当前 8 星。
它解决的问题可以概括成一句话:给 DSH 智能体一个可复用的浏览器上下文,让它用 accessibility 快照和语义定位去操作页面,而不是把整页 DOM 塞进上下文,也不提供任意 JavaScript eval。
README 写明:行为设计参考了 Codex Browser 技能,但不包含 Codex 运行时代码,也不依赖 OpenAI 的浏览器绑定。项目文档 docs/CODEX_BROWSER_DESIGN.md 把这一点写得很清楚——只映射「持久绑定、显式标签页、语义点击、事后再观察」这类交互原则,浏览器进程由插件自己用 Playwright 拉起。
核心功能¶
十个原生 browser_* 工具¶
插件向 DSH 工具注册表挂上 10 个模型可调用工具,名称和职责以仓库 README 为准:
| 工具 | 作用 |
|---|---|
browser_open |
打开标签页,可同时导航到 URL |
browser_navigate |
在已有标签页里导航 |
browser_snapshot |
读取有长度上限的 accessibility 或可见文本快照 |
browser_click |
点击语义目标 |
browser_fill |
替换输入框内容,可选按 Enter |
browser_press |
发送 Playwright 键盘按键 |
browser_wait |
等待目标、URL 或加载状态 |
browser_history |
后退、前进或刷新 |
browser_screenshot |
保存 PNG,返回绝对路径 |
browser_tabs |
列出、选择或关闭标签页 |
架构文档把调用链写得很短:profile 的 cordis.patch.yml 挂上插件入口,入口再往工具表和系统提示词里各贡献一块,真正驱动浏览器的是内部的 BrowserController。控制器按需启动浏览器,标签页用单调递增的 tab-N 作为稳定 ID。
语义定位,CSS 只作退路¶
页面交互优先用语义字符串,而不是让模型拼选择器。README 给出的推荐格式如下:
role=button|保存
button|保存
label=邮箱
placeholder=搜索
text=设置
testid=submit
css=#legacy-button
role=button|保存 和快照友好的简写 button|保存 是同一类定位。CHANGELOG 里 0.1.3 专门加了这种 | 简写,原因是实测里智能体经常从 accessibility 快照里直接抄出 textbox|Name 这种写法,旧版解析失败。CSS 仍然可用,但文档把它标成兼容出口。
每次打开、导航或改页面之后,工具会返回一份新的、有长度上限的快照(默认最多 40000 字符)。系统提示词要求智能体把页面内容当成不可信数据,先观察再动手,动手后再观察一遍。
懒启动、回退浏览器、统一清理¶
浏览器不是插件一加载就启动。第一次真正调用浏览器工具时,控制器才会按配置拉起进程。未指定 channel / executablePath 时,Chromium 的尝试顺序是:
- Playwright 管理的 Chromium
- 本机已安装的 Google Chrome
- 本机已安装的 Microsoft Edge
显式配置的 channel 或 executablePath 优先。Firefox 和 WebKit 需要对应的 Playwright 浏览器,或给出可执行文件路径。Playwright Chromium 可以用下面这条命令安装:
npx playwright install chromium
Cordis 卸载插件时会关掉页面、上下文和浏览器进程。关闭某个标签页时,会协作式取消该页上尚未完成的操作。插件声明不提供任意页面 JavaScript 求值,这是和部分社区浏览器插件的明显差别。
安装与启用¶
社区目录页给出的安装命令是:
dsh plugin add github:Clizo1209/dsh-playwright-browser
这条命令以目录页原文为准。dsh CLI 会从 GitHub 解析插件并装进当前配置。若需要可复现安装,目录页建议固定 commit 哈希:
dsh plugin add github:Clizo1209/dsh-playwright-browser#commit
把 commit 换成实际哈希即可。
仓库 README 另外提供了 npm 安装方式,适合已经指定 profile 的场景。当前包名与版本为 dsh-playwright-browser@0.1.3:
dsh plugin --profile web add dsh-playwright-browser
从源码目录打包再装:
npm install
npm pack
dsh plugin --profile web add ./dsh-playwright-browser-0.1.3.tgz
无界面 profile 可以把 web 换成 headless。装完后可以用下面的命令检查组合配置,不必真正启动会话:
dsh --profile web --dump-config
Git 安装会跑包里的 prepare 脚本(即 TypeScript 构建)。README 提醒:pnpm 10 及以上可能要在该 profile 的 pnpm-workspace.yaml 里明确允许这次构建;预编译的 npm 包或 tarball 不需要在 profile 里再编一遍源码。
环境要求也写在 README 里:Node.js ^22.19.0 或 >=24.0.0,以及一个可用的 DSH profile。浏览器三选一即可:Playwright Chromium、系统 Chrome / Edge,或配置 executablePath。
目录页和插件安全说明都强调:插件以当前 dsh 进程的权限运行,安装时可能执行代码。 安装前应检查源代码仓库和许可证。
配置与用法¶
DSH 会在已安装的 bundle 补丁之后再应用用户覆盖。把类似下面的一行加进该 profile 的 cordis.patch.yml(仓库 examples/cordis.patch.yml 与 README 一致):
- id: playwright-browser
config:
browser: chromium
channel: chrome
headless: true
viewportWidth: 1440
viewportHeight: 900
screenshotDir: .dsh-browser/screenshots
README 列出的配置项如下(未写出的项沿用默认值):
| 配置项 | 默认值 | 用途 |
|---|---|---|
browser |
chromium |
chromium、firefox 或 webkit |
headless |
true |
是否无头运行 |
channel |
— | chrome、msedge 等 Chromium channel |
executablePath |
— | 浏览器可执行文件的绝对路径 |
userDataDir |
— | 给智能体专用的持久化目录 |
viewportWidth |
1280 |
视口宽度 |
viewportHeight |
800 |
视口高度 |
actionTimeoutMs |
15000 |
定位和操作超时 |
navigationTimeoutMs |
30000 |
导航超时 |
maxSnapshotChars |
40000 |
快照最大字符数 |
screenshotDir |
.dsh-browser/screenshots |
截图目录 |
不要把 userDataDir 指到自己日常使用的浏览器配置目录。文档要求使用智能体专用目录;插件也不会去翻个人浏览器的 cookie、密码或扩展状态。
装好之后,这些工具会进入当前会话的工具表,由模型按任务调用,而不是你在终端里一条条敲 browser_click。一条符合文档设计的操作顺序是:
browser_open打开页面(或browser_navigate跳转到已有标签)- 阅读返回的快照,确认可见控件
- 用
role=/label=/text=等形式browser_click或browser_fill - 需要时
browser_wait,或browser_screenshot留证 - 多页面任务用
browser_tabs切换,用完再关闭
截图会写成本地 PNG,工具返回绝对路径。DSH 各条模型路由对图片附件的支持不一样,调用方可以把这条路径交给已有的读图工具。
适用场景与注意事项¶
适合在 DSH 里做这类工作的人:要让智能体操作 JavaScript 渲染后的页面、走多步表单、在多个标签间对照信息,或者需要截图作为操作证据。它不是完整的网页安全沙箱。架构文档写得很直接:这是浏览器自动化,运维仍要按自己的环境加上出口、代理、文件系统和账号控制。
使用前值得逐条核对的边界:
- 只接受
http:、https:和about:导航,带嵌入式用户名或密码的 URL 会被拒绝。 - 页面正文是观察数据,不是给智能体的指令。
- 涉及凭据、下载、购买、权限弹窗、账号变更和 CAPTCHA 时,文档要求先获得适当授权。
- 插件不会在后台默默下载浏览器;环境缺失时先说明最小安装步骤,未授权不得改机器。
- 截图和日志可能带上页面内容,需要按敏感数据处理。
- 在项目到达 1.0 之前,安全修复只覆盖最新发布的
0.x。当前仓库最新发布是0.1.3。
DSH 本身还在快速迭代,插件作者也标明可能要跟着核心版本做兼容更新。安装社区插件前,建议打开 GitHub 仓库看一眼 LICENSE、SECURITY.md 和 src/,确认许可证(MIT)和权限模型可以接受。
小结¶
dsh-playwright-browser 给 DSH 补上的是一套语义化、多标签、可取消的 Playwright 控制面:10 个 browser_* 工具、有上限的 accessibility 快照、Chrome / Edge 回退,以及明确不做页面 eval。它是 Clizo1209 维护的社区 MIT 项目,不是 DeepSeek 官方捆绑能力。
目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-playwright-browser/
GitHub:https://github.com/Clizo1209/dsh-playwright-browser
npm:https://www.npmjs.com/package/dsh-playwright-browser