他山之石
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_752cff44/onlinearticle2knowledge。
技能介绍
要解决的问题
微信公众号文章里的图片几乎都启用了懒加载和防盗链,直接抓取 HTML 只能拿到占位节点,正文里的图片全是「加载中」。更麻烦的是,这类文章的正文高度依赖脚本渲染,传统 curl 或 WebFetch 拿到的源码里图片地址根本没有解析出来。结果是下载下来的 PDF 看起来完整,打开后却发现图片区域全是空白或占位符,而图片恰恰是公众号文章信息密度最高的部分。
核心能力与执行流程
onlinearticle2knowledge 的做法是放弃静态抓取,直接用 Playwright 驱动浏览器模拟真实滚动,逐屏触发微信的懒加载逻辑,等所有图片渲染完成后再触发打印为 PDF。脚本 print-wechat-article.js 负责整页渲染,结束后会自动校验三项指标:
- 图片数量:控制台输出
加载成功: N/N 张图片,与原文一致才算通过 - 文件体积:按图片数量估算阈值,例如 9 张图的 PDF 应大于 3000 KB,5 张应大于 1500 KB,过小通常意味着图片没渲染完
- 标题与字数一致性:对比原文与 PDF 的标题和正文长度,字数允许 10% 误差,防止抓到错误页面
下载完成后,文件按 {发布年月日}-{发布主体}-{发布地点}-{文章标题}.pdf 自动命名,标题直接沿用微信原文,不做改写。随后的上传流程分三种场景:用户只给链接时,先询问是否上传知识库;给了链接和知识库名称时直接搜索并上传;批量场景下主 Agent 可以并行启动多个子 Agent,每篇独立处理,单篇失败不会阻断整体,只记录失败原因并支持重试。
对于非微信的普通网页(如 gov.cn 政策解读页),另有通用脚本 download-article-generic.js,支持三种模式:page 整页转 PDF、attachment 直接下载原始附件 PDF、local-html 打印预先重排好的本地 HTML,适用于遇到反爬时先用 WebFetch 取原文再由 AI 重排的场景。
适用边界
- 首次使用需要安装 Playwright,且依赖系统 Chrome,不额外下载 Chromium
- 验证指标是启发式的,文件大小阈值只适用于常规图文排版,含大量图表或长图的文章需要人工抽查
- 防盗链图片如果站点强制校验 referer,滚动也可能拉不到图,这种情况目前没有兜底方案
- ima 知识库上传前会检查文件名重复,但只支持「保留两者」或「终止」,不支持替换
- 批量并行依赖多 Agent 调度能力,单 Agent 串行方案仅适合文章数量较少的场景
使用场景
- 拿到一篇含多张懒加载图片的公众号长文,需要保存为 PDF 且每张图都完整可见,不能出现空白占位。
- 把公众号文章归档进 ima 知识库:用户给链接,希望下载 PDF 后自动传入指定知识库作为检索语料。
- 采集 gov.cn 政策解读页,正文 JS 动态渲染且有反爬,需要先取原文再 AI 重排为本地 HTML 转 PDF。
- 一次性给三篇以上公众号文章,需要并行下载并逐篇上传知识库,单篇失败不影响其余文章。
适合人员
- 需要把公众号长文存为离线资料的内容编辑,诉求是正文和配图都完整保留,日后随时翻阅。
- 搭建个人知识库的研究者,诉求是把零散在线文章批量沉淀进 ima,形成可检索语料。
- 负责政策或行业动态采集的分析师,诉求是把动态渲染页面转成可信 PDF 存档。
- 维护多 Agent 采集流水线的后端工程师,诉求是批量下载、逐篇上传且单点失败可隔离重试。