前言¶
在 DeepSeek Harness(DSH)里做联网任务时,常见路径是用 WebFetch 把页面拉成可读文本。遇到 React、Vue、Next、Nuxt 等客户端渲染的单页应用(SPA)时,这条路径经常失灵:超时、只返回打包混淆后的 JS,或 HTML 里只剩空壳。真实数据往往在页面背后的 JSON API 里,而不是首屏 HTML。
下面介绍社区插件 spa-api-extract(维护者 sunwindy91,分类:联网工具)。它把一套可复现的 CLI 流水线写进 Agent Skill,在 WebFetch 失败时改走 curl、grep 与 Python,定位并只读调用页面内部使用的 JSON 接口,再把结构化结果落到 UTF-8 文件。插件本身只注册技能知识,加载时不发起网络请求、不暴露宿主工具。
这是什么¶
spa-api-extract 是一个 Agent Skill 插件,npm 包名为 @sunwindy91/dsh-spa-api-extract(当前资料中版本 0.1.2),许可证 MIT。仓库同时遵循开放 Agent Skills 约定(根目录 SKILL.md + frontmatter),也可整目录放入其他支持该格式的 harness 技能目录。
DSH 侧通过 Cordis patch 把技能挂到 ctx.skills;index.js 注入 skills 模块,lib/skills.js 注册根目录 SKILL.md。详细命令在 SKILL.md,grep 正则与 SPA 常见数据形态(REST、GraphQL、__NEXT_DATA__、window.__* 等)在按需加载的 reference.md。
核心功能¶
插件描述的能力可以概括为一条固定流水线(资料原文步骤):
- 确认失败信号 — 超时、仅 JS、空壳 → 判定为 SPA 场景。
- curl-probe — 带
-sS -m拉取响应头与原始 HTML 骨架。 - grep — 在 HTML/JS 中找
fetch()、/api/端点、<script src>以及 BASE 路径推导线索。 - 重建并请求 JSON API — 只读
GET,必要时携带 URL 上的鉴权 query(例如?t=xxxx)。 - Python 解析 — 先看结构,再提取到 UTF-8 文件(避免 Windows 下 GBK 乱码)。
- 校验 — 记录数、字段完整性、输出非空。
When to use(资料列举):
- 目标页是客户端渲染的 SPA。
- 真实数据在 JSON API,不在初始 HTML。
- URL 带 token 类 query 参数。
- WebFetch 已超时或只返回脚本。
安全与合规(资料强调):
- 默认只读,仅使用
GET;写操作需用户明确授权。 - Token 视为秘密,不得写入最终输出、提交日志或共享文件。
- 仅访问有权访问的目标,遵守 ToS、robots 与限速。
- 无遥测、无监听、无回传;正文为纯指令与占位示例(
HOST/PATH/TOKEN)。
安装与启用¶
安装前需已有 @deepseek-ai/dsh-base(挂载技能注册表)。在 dsh 部署中执行(命令来自仓库 README):
dsh plugin --profile web add github:sunwindy91/spa-api-extract
仓库自带 cordis.patch.yml,安装后由 dsh 自动挂载,无需手工 patch。安装过程会把参数转发给 profile 目录内的 pnpm,需要能访问 github.com。若本机 git 配置了代理但代理未运行,可能出现 ECONNREFUSED,需保证代理可用或临时取消 git 全局 http.proxy。
yaml 为 peerDependency(宿主通常已提供);若环境中缺失,插件会退化为内置极简 frontmatter 解析,不会因缺依赖而加载失败。
也可不使用 dsh,将目录放到 Agent 技能路径,例如:
~/.qwenworkcn/skills/spa-api-extract/
典型用法¶
启用插件后,模型应加载 spa-api-extract 技能,按 SKILL.md 逐步执行。整体思路是:先确认 WebFetch 失败属于 SPA 场景,再用 curl 取原始页面,用 grep 从 bundle 或内联脚本里挖出 API 路径与参数,构造与浏览器一致的只读 GET,最后用 Python 探查 JSON 结构并写入 UTF-8 结果文件。
资料未给出绑定某一真实站点的完整复制粘贴示例;占位符与正则库、鉴权变体、故障排查表见 reference.md。执行环境使用的是 当前 dsh 进程权限下的 curl 与 python,与你在终端手动跑同一套命令等价。
适用场景与注意¶
适合:需要在 Agent 工作流里稳定从 SPA 后台 API 抽结构化数据、且 HTML 抓取已明确失败的开发者;与 DSH「一切皆插件」的技能扩展方式一致。
注意:
- 插件 0 GitHub Stars(资料标注);安装前建议在 GitHub 阅读源码与
LICENSE。 - 只注册知识,不替代你对目标站点授权与合规的判断。
- 社区目录 SkillHub 插件页 与 GitHub 为独立信息源,与 DeepSeek / 幻方无官方从属关系。
链接¶
- 目录页:https://www.skillhub.cn/plugins/sunwindy91/spa-api-extract
- GitHub:https://github.com/sunwindy91/spa-api-extract
经过上面的步骤,你可以在 WebFetch 搞不定 SPA 时,把「找内部 JSON API + 只读拉取 + UTF-8 落盘」固化成可重复的技能流程,而不是每次临时猜 bundle 里的接口路径。