在 get_all_works 方法中,有两个关键的计数变量:
iters: 总请求次数(包括失败的请求)
iters += 1max_iters = 800)page_count: 成功获取到的页数(只统计有作品的页面)
notes 不为空时:page_count += 1总页数可以通过以下方式计算:
总页数 = ceil(总作品数 / 每页大小)
其中:
总作品数 (total): 从 API 返回的声明总数,可能来自:
tags 中的 special.note_time_desc 的 notes_counttags 中其他 tag 的 notes_count 最大值data.total 或 data.total_countdata.page.total 或 data.page.totalCount
每页大小 (api_page_size): 固定为 20
开始循环 (最多 800 次)
↓
iters += 1 (总请求次数)
↓
调用 API: fetch_notes_page(cursor)
↓
检查响应是否成功
├─ 失败 → 如果是第一次请求,切换到滚动模式
└─ 成功 → 继续
↓
检查 notes 是否为空
├─ 为空 → 停止分页
└─ 不为空 → page_count += 1 (成功页数+1)
↓
解析作品并去重
↓
检查是否获取完所有作品
├─ 累计作品数 >= 总数 → 停止分页
└─ 继续 → 更新 cursor,继续下一页
在分页完成后,会输出以下统计信息:
分页统计: 总请求次数={iters}, 成功获取页数={page_count}, 累计作品数={len(works)}, 声明总数={total}
示例:
假设账号有 368 个作品:
总作品数 = 368
每页大小 = 20
理论总页数 = ceil(368 / 20) = 19 页
实际执行:
- 第 1-18 页:每页 20 个作品,共 360 个
- 第 19 页:8 个作品
- page_count = 19(成功获取的页数)
- iters = 19(总请求次数,如果都成功的话)
Python 服务的日志通过 print(..., flush=True) 输出到控制台(标准输出)。
要查看完整的分页日志,需要:
确保 Python 服务正在运行
cd server/python
python app.py
所有 print 语句都会立即输出(因为使用了 flush=True)
关键日志标识
========== 开始自动分页获取作品 ==========: 分页开始
第 {iters} 次请求 (cursor={cursor}): 每次请求
✅ 第 {page_count} 页获取成功: 成功获取的页
📊 分页统计: 分页完成后的统计信息
Node.js 端的日志会输出到:
server/logs/combined.log - 所有日志server/logs/error.log - 错误日志如果 Python API 返回 0 个作品,可能的原因:
Python 期望 JSON 格式的 Cookie 数组
登录状态失效
检查账号的 Cookie 是否过期
查看 Python 日志中是否有 "Cookie 已过期" 的错误
API 调用失败
查看 Python 日志中的错误信息
检查网络连接和 API 响应
页面加载问题
检查是否成功访问笔记管理页面
查看是否有导航超时的错误
运行 Python 服务的终端窗口会显示所有日志。
python app.py > python.log 2>&1
然后查看 python.log 文件。
运行测试脚本时,Python 服务的日志会输出到运行 Python 服务的终端窗口:
# 终端 1: 运行 Python 服务
cd server/python
python app.py
# 终端 2: 运行测试脚本
cd server
pnpm exec tsx src/scripts/test-xhs-works-sync.ts 35
Python 服务的日志会在终端 1 中显示。