前言¶
在 DeepSeek Harness(DSH)里做调研时,常见需求是:按关键词搜小红书、点开一篇笔记、把正文和评论留下来供后续对话引用。直接用通用爬虫或 Playwright 脚本往往踩平台风控——跳转笔记 URL 会触发安全限制,合成点击很快被识别,详情接口也不稳定。社区维护者 BaxterL 的 dsh-xhs-search(GitHub:BaxterL/dsh-xhs-search,目录:SkillHub 条目)把搜索、点开、DOM 抽取和本地知识库收成一套 DSH 插件,分类为联网工具;运行时除 Node ≥ 22.5 内置能力外不额外依赖 Playwright、Puppeteer 或 ws。
这是什么¶
dsh-xhs-search 是给 DeepSeek Harness 用的小红书阅读器:通过 CDP 驱动隔离浏览器、尽量用真实输入点击打开卡片、只从 DOM 读正文与评论,结果写入本地知识库。装好后在会话里描述需求,模型会调用名为 xhs 的工具完成检索与阅读;也可使用同名 CLI xhs-search 人工调试。当前 npm 包版本为 0.1.0,许可证 MIT,维护者 BaxterL。
与「普通爬虫」差在哪里¶
小红书 Web 端对自动化敏感。该插件在实现里固定了几条策略(而非依赖提示词):
| 问题 | 常见表现 | 插件做法 |
|---|---|---|
| 直接打开笔记 URL | 安全限制、整页重定向后搜索失效 | 只点搜索页卡片;卡片不在 DOM 则报 card-not-in-dom,不降级为跳 URL |
| CDP 合成点击 | 很快被识别 | Windows 上优先 SetCursorPos + 硬件点击;无校准时退回 CDP 并标明降级 |
| 详情 API | /api/sns/web/v1/feed 易 500 |
正文与评论只从 DOM 解析 |
| 封面格式 | URL 为 jpg 实为 WebP | 按魔数嗅探,必要时经 Pillow 转码 |
详情浮层是「先挂载、后填数据」:点开瞬间标题可能为空。阅读前会轮询到浮层数据就绪,避免读到空正文却显示「成功」。
核心功能¶
插件向 DSH 注册工具 xhs,每次调用指定一个 action:
| action | 作用 |
|---|---|
search |
搜索,返回当前屏卡片(标题、作者、赞藏评、封面、相对时间等) |
read |
从当前搜索页点开一篇,返回正文、话题、配图、最多 60 条评论 |
harvest |
搜索后自动打开最新 N 篇并入库 |
notes / note |
只读本地知识库,不联网 |
status |
登录门、限流、验证码、本轮预算 |
limits |
是否还能开下一篇、需等待多久 |
config |
路径与配置 |
默认工作区为 ~/Desktop/xhs/,内含隔离浏览器配置、kb/notes.json 等;notes.json 采用原子写,重复读同一笔记会合并评论与配图并保留最早 firstSeen。
平台侧按账号频次限流(默认两篇间隔 25 秒、每小时最多 60 篇等),逻辑在 guard.ts 中强制执行;须区分 login gate、rate limit、captcha 三种状态。插件红线为只读:不点赞、不评论、不关注、不发帖、不私信。
安装与启用¶
在 DSH desktop profile 的 package.json 中加入依赖并声明 bundle,然后完全退出 DSH(含托盘)再重新打开。安装不会自动开浏览器,首次调用工具时才启动独立 --user-data-dir 窗口。
// ~/.dsh/profiles/desktop/package.json
{
"dependencies": {
"dsh-xhs-search": "^0.1.0"
},
"dsh": { "profile": { "bundles": ["dsh-xhs-search"] } }
}
首次建议依次执行(校准只需一次;窗口移动后需重做 calibrate):
npx xhs-search launch # 启动窗口,首次在此扫码登录
npx xhs-search calibrate # 校准视口原点(Windows 硬件点击)
npx xhs-search status # 确认登录、限流、验证码状态
环境与权限:插件以当前 DSH 进程权限运行,会读写本地工作区与浏览器配置;安装前宜浏览仓库源码与 MIT 许可证,勿共享他人登录态或 cookie。
平台:Windows 上硬件点击依赖 user32.dll;macOS / Linux 可运行但退回 CDP 点击,read 会标明 opened by: cdp,风控风险更高。浏览器需 Chromium 系(Edge / Chrome / Brave),Node ≥ 22.5。
典型用法¶
会话内由模型调用 xhs 即可;命令行与工具同一套实现,便于复现:
npx xhs-search search "应援物料" --limit 10
npx xhs-search read 6a9b80c3000000002601fb09
npx xhs-search harvest "追星 物料" --limit 5 --max-age 72
npx xhs-search notes "教程"
需要调路径或限速时,可参考 README 中的环境变量:XHS_WORKSPACE、XHS_BROWSER、XHS_PORT、XHS_REAL_INPUT、XHS_PYTHON、XHS_DETAIL_GAP_MS、XHS_SEARCH_GAP_MS、XHS_MAX_DETAILS_PER_HOUR、XHS_BLOCK_COOLDOWN_MS。
适用场景与注意¶
适合:需要在 DSH 对话中检索小红书公开笔记、沉淀正文与评论到本地 JSON,供后续 notes 离线查询的研究或整理流程。
注意:高频批量抓取易触发平台风控并可能违反服务条款,应使用默认限速且遵守「只读」范围。对外发布整理内容时须注明信息来自小红书用户。DSH 生态理念是「一切皆插件」;SkillHub 等目录为社区站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-xhs-search 把隔离浏览器、点击策略、DOM 抽取与本地知识库绑在 DSH 的 xhs 工具上,零额外运行时依赖,适合把「帮我看看小红书上的 xxx」落成可复用的本地资料。