这份技能真跑出来的数
口径:门槛设为阅读 ≥ 1000 才入库,< 1000 的 28 篇是早年存档或小号文章,保留在原始 JSON 里但没有进表。阅读量是采集当天的快照,每行都带采集时间。
为什么这件事必须「看屏幕」
公众号文章的阅读数走的是登录态下的异步接口(页面里那个 read_num),没有公开 HTTP 入口可查。意味着任何「传个链接就返回阅读量」的承诺都是假的——要么你有号主的后台,要么你得像人一样把文章打开、滚到底、看那行字。
所以这个技能的定位很明确:把「人肉翻公众号」这件事自动化。它不绕过任何权限,只是替你把鼠标键盘的动作做一遍——打开、滚动、截图、认字、复制链接、关标签。
| 能拿到的 | 从哪来 | 可靠性 |
|---|---|---|
| 阅读量 | 文章页滚到底,「阅读 NNNN」 | 界面直读,每次都是当天最新值 |
| 赞 / 转发 / 评论数 | 同一屏底栏四件套 | 部分老文、转载文不显示,留空 |
| 留言数 + 首条留言 + IP + 时间 | 底部留言区 OCR | 只有作者「精选」过的才公开 |
| 标题 / 公众号 / 作者 / 发布时间 | 文章页 HTML 元信息 | 权威值,比 OCR 稳,采集后自动回写校正 |
| 原始分享链接 | 「···」→「复制链接」 | 可直接在浏览器复核 |
一条真实记录长什么样
转发8,928 评论566
留言数45 听过931
首条评论20多年前的述职报告拿来学?
发布2025-12-16 16:00
地点北京
采集时间2026-11-03 20:54:32
通道Windows 微信 4.x · WeChatAppEx · UI Automation
这条记录的每一格都能回到源头核对:阅读与四件套来自文章底栏,留言来自留言区截图,链接来自「复制链接」。拿不到的东西也写清楚——留言的点赞数微信不展示,所以表里没有这一列;作者只精选过自己引导语的号,首条评论就是那句引导语,表里照原样记。
六个号,逐号的账
| 公众号 | 已采篇数 | 阅读 ≥ 1000 | 阅读 ≥ 1 万 | 单篇最高 | 阅读合计 |
|---|---|---|---|---|---|
| 华夏基石e洞察 | 877 | 876 | 91 | 100,000 | 4,689,044 |
| 领教工坊 | 690 | 687 | 58 | 66,000 | 2,874,022 |
| HR赋能工坊 | 566 | 565 | 7 | 100,000 | 1,485,557 |
| 锚在新宇宙 | 358 | 358 | 45 | 71,000 | 1,803,690 |
| AI组织进化论 | 225 | 224 | 15 | 89,000 | 896,923 |
| 包子堂 | 31 | 9 | 1 | 25,000 | 51,514 |
| 合计 6 个 | 2,747 | 2,719 | 217 | 100,000 | 11,800,750 |
包子堂只有 31 篇是因为它的门槛单独放宽到 500 阅读、且这个号本身更新少;剩下的差距不是漏采,是号与号的量级差。
五步流水线
三层通道,各管一段
- UI Automation:拿窗口、找列表项、点卡片、读文本。能读到的结构化文本优先走这里,比认字稳一个量级。
- RapidOCR:底栏那行「阅读 100000 赞 619」常常不在 UIA 树里,以及留言区,靠截图识别。超过 900px 宽的图自动分块,否则超宽扁条带检测不出来。
- Win32 + 剪贴板:点击用
SendInput合成事件、滚动用SendMessage(WM_MOUSEWHEEL)、复制链接用 ctypes 直接操作剪贴板。
17 条坑,最贵的六条
references/卡点与解法.md(27.5 KB)| 现象 | 真因 | 解法 |
|---|---|---|
| 32 篇明明在屏幕上,一篇都匹配不上 | 卡片上写全角「,」、清单里存半角「,」,两边各用一套归一化 | 统一走 NFKC + 抹掉全部标点空白。代价是白扫了 149 屏 |
| 点标题,打开的却是隔壁那张卡 | 主页是双列布局,两列标题在同一 cy 上交错,±340 的窗口会把隔壁列拉进来 | 窗口收到 ±170,点击点改点「阅读 N 赞 M」那一行(它的 cx 就是本列中心) |
| 「滚 7185px」实际飞了 14 万像素 | dy 是「每一格」的格数,写成 dy=-n, steps=n 就是 n²×100px | 改成 dy=-1, steps=n |
| 连点三个「进账号」全进了一个假主页,扫出 0 篇 | 搜一搜右侧「相关搜索」每条都以账号名开头(领教工坊私董会收费 / 招聘…) | 改用 UIA 找「xxx - 账号」这个 ListItem,点它正下方 95px 的卡片主体 |
| 点击打到了别的窗口,OCR 出「编辑(E)/窗口(W)」 | WorkBuddy 是 TOPMOST,盖住微信 | SetWindowPos(HWND_NOTOPMOST) 先把宿主打掉再点 |
剪贴板写入报 access violation writing 0x0 | 64 位下 GlobalAlloc/GlobalLock 没声明 restype | 所有 ctypes 调用补全 argtypes / restype |
还有一条不算坑但必须记住:「翻到底」的判据不能只看有没有新标题。单列大卡的号有 540 篇、合计 11 万像素,UIA 树只保留窗口附近一段。现在是连续 8 次无新增后,先 End 跳底复核、再 Home 回顶复核,两轮都空才收工。
先说清楚做不到的部分
--min 5000 是 326 篇,--min 10000 是 62 篇),不是一趟跑完。包里有什么
完整脚本、两份口径文档,以及上面那套流程的全部命令。换一批号再跑,改的只是账号清单和门槛。
SKILL.md 技能说明与五步流程(本页面的来源)
scripts/ 40 个 Python 脚本,5,976 行
wxlib.py Win32 底层:窗口/截图/OCR/点击/键盘/剪贴板
uia.py UI Automation:枚举、查找、取值、归一化
gzh.py 公众号链路:搜一搜 → 文章页 → 复制链接 → 读底栏
scan_profile.py 进主页一路翻到底,落每张卡片上的阅读/赞
probe_cutoff.py 二分找某年 1 月 1 日在列表里的下标
collect_uia.py 从主页自上而下逐条打开达标文章
fill_gaps.py 清单达标但没采到的定点补
run_years.py 多个号按各自门槛串行跑
build_workbook.py 出三 sheet Excel
export_sheet_png.py 整表导 PNG 做视觉核验
references/
字段口径.md 每个字段的定义、来源、空白含义
卡点与解法.md 17 条 Windows 实测坑(27.5 KB)
依赖只有四个:pip install mss pillow rapidocr_onnxruntime openpyxl。
姊妹技能:同一件事的另一条路
分工一句话:要指标找这里(界面直读,只有它看得见阅读量、赞、精选留言);要全文去那边(接口路线,秒级拿正文加图片,还能开 RSS 盯增量);两个都要,就先用这里的阅读量筛出值得存的篇目,再让那边整篇搬进本地库。
数据口径:2025 年起全量逐篇采集,阅读门槛 ≥ 1000(包子堂 500),6 个号 2,747 篇,采集时间 2026-11-02 ~ 11-04。
← 回 skills 实验室