读网页/头条文章全文的 webfetch 工具:三级策略(直连 → Edge 常驻无头浏览器 CDP → dump-dom 兜底),自动识别头条反爬质询页,附 toutiao-reader 实战经验技能。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:RyanShen3/dsh-toutiao-reader
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
dsh-toutiao-reader
English | 中文
把「浏览今日头条文章」的实战经验打包成 DeepSeek Harness (DSH) 插件:一个 webfetch 工具 + 一个 toutiao-reader 技能。
模型调用 webfetch(url)
├─ ① direct-fetch 静态直连 ~1s(域名缓存记住哪些站必须走浏览器)
├─ ② Edge CDP 常驻无头 首次冷启动 ~20s → 常驻端口 9333,单次 ~3-6s
│ · 复用常驻标签页(省 ~4s) · 禁图 + 屏蔽字节跳动 CDN 提速
│ · 头条质询页(安全验证/__ac_signature/acrawler)自动等 reload 宽限窗口
└─ ③ dump-dom 兜底 CDP 不可用时一次性渲染
为什么需要它
今日头条的静态 HTML 必命中反爬(__ac_nonce/__ac_signature/acrawler),普通 fetch 只能拿到「安全验证」页;web_search 又只给摘要。这个插件把两者之间的空白补上:给一个文章 URL,返回标题 + 全文纯文本。对头条做了专门优化,同时对一般网页(博客、新闻站、国内站直连可达者)同样适用。
提供什么
工具:webfetch
| 参数 | 类型 | 说明 |
|---|---|---|
url |
string,必填 | 文章 URL(头条 PC 页支持最好;移动/分享页多为 App 引导页,无文字正文) |
maxChars |
number | 返回正文上限,默认 12000,≤60000,超出置 truncated |
outfile |
string | 可选:全文落盘(title+空行+正文);绝对路径或相对 workspace 配置 |
返回:{ method, title, text, textLength, truncated, outfile?, error? }
- 失败以
{ error }形态返回,不抛异常,主流程永不被抓取拖垮 - 声明
isConcurrencySafe: false(CDP 复用同一标签页,强制串行)与timeoutMs: 120000 method字段告诉你走了哪条路,方便判断「快」还是「被反爬了」
技能:toutiao-reader
随插件注册的经验文档(模型可自动调用):头条 URL 形态表、method 字段解读、质询页处理与重试节奏、正文过短的排查(视频页/问答页/App 引导页)、常驻浏览器管理(端口/pid/停止命令)、网络环境注意事项(curl 不可靠、代理、沙箱重定向)、后备脚本路径。
安装
方式一:插件市场(推荐)
DSH Web → 设置 → 插件市场 → 搜索 toutiao → 安装。
方式二:CLI
dsh plugin --profile web add dsh-toutiao-reader
方式三:手动(本地开发)
# junction 进 profile(无需管理员)
New-Item -ItemType Junction -Path "$env:USERPROFILE\.dsh\profiles\web\node_modules\dsh-toutiao-reader" -Target "<插件目录>"
# profile package.json:dependencies 加 "dsh-toutiao-reader": "link:<插件目录>",bundles 数组加 "dsh-toutiao-reader"
装完重启 dsh web 生效。不要在 profile 目录里跑 pnpm install(会把官方包复制成物理副本,详见 dsh 社区经验)。
配置
在 profile 的 cordis.patch.yml 用 id 覆盖模式(只写 id,不要重复 insert):
- id: dsh-toutiao-reader
config:
workspace: D:/DSH_Workspace # 相对 outfile 的解析基准
cdpPort: 9333 # CDP 调试端口
browserPath: "" # Edge/Chrome 路径覆盖,空则自动探测
maxChars: 12000 # 默认返回正文上限
domainCachePath: "" # 域名缓存路径,空则 %TEMP%/webfetch-domains.json
常见问题
抓取很慢? 首次冷启动常驻浏览器 ~20s 属正常;之后单次 ~3-6s。CDP 阶段禁图、屏蔽字节 CDN 是刻意提速。
正文很短或为空? 多为视频页/问答页/App 引导页(移动分享页实测仅有 ~40 字引导文案)。换 PC 版链接(www.toutiao.com/article/<id>/)通常可解。
遇到「安全验证」循环? 等几秒重试一次即可;不要高频重试(触发更严风控)。同一域名解过一次会被域名缓存记住。
浏览器状态坏了? 读 %TEMP%\webfetch-edge.pid 后 taskkill /PID <pid> /T /F,下次调用自动冷启动。
已有一键脚本? 与工作区脚本 node tools/webfetch.mjs <url> [outfile] 共享同一个常驻浏览器和标签页(同名 pid/tab/profile 文件),互相加速;插件不可用时脚本就是后备路径。
安全与隐私
- 只读抓取:不写文件(除非显式传
outfile)、不读凭据、不上报任何数据 - 常驻无头浏览器仅监听本机回环(127.0.0.1)
- 域名缓存只存「该域是否需要浏览器」一个字符串,无任何内容记录
兼容性
- 需要本机装有 Edge 或 Chrome(自动探测;可用
browserPath指定) - Node.js ≥ 20(依赖全局 fetch / WebSocket / AbortSignal.any);DSH web 0.1.0-rc.6+ 测试通过
- 境外站点直连超时时,可参考技能文档里的代理建议
License
链接
同类插件
Tencent/WeKnora#dsh-weknora★ 35688
把 WeKnora 知识库接入 dsh 的四个只读工具:列出知识库、混合检索原文片段、按顺序还原单篇文档,以及直接取用 WeKnora 自己带引用的 RAG 或 ReAct agent 回答(含可续聊的 session id)。
superdesigndev/treg★ 6403
给 Agent 的工具目录:按「要做的事」检索约 2,600 个外部接口(SEO 与 SERP、外链、社交、人物与公司信息补全、广告库、抓取),查看参数与单次调用价格后直接调用,凭据由服务端注入。附带技能,MCP 行在未设置 TREG_TOKEN 前保持禁用。
T-Auto/dsh-ops★ 4593
为 Windows 的 DSH 提供 bash、PowerShell 7 及 Rust 高性能工具,减少 token 消耗。
sixtysevenlf/dsh-blender-plugin★ 1388
让 DSH agent 通过直连 TCP 通道驱动本地 Blender,提供 15 个工具:视口帧、自定义视角渲染、Python 执行、无头与作业卸载、事务回滚,以及 34 个 family / 228 个 op 的规划层。
TencentCloudBase/CloudBase-AI-Toolkit#dsh-plugin★ 1152
把腾讯云 CloudBase 后端接入 DeepSeek Harness——在对话里搭好并部署全栈应用,查询结果渲染为表格卡片(分页、排序、导出 CSV),部署后可预览真实域名,并提供 CloudBase MCP 工具集(`mcp__cloudbase__*`),登录走 device-code 流程。
anysearch-team/anysearch-dsh★ 665
基于 AnySearch 的实时网页与垂直搜索插件,为 DeepSeek Harness 提供搜索工具。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。