微博超话签到与加分任务
Overview
给用户自己关注的微博超话执行每日签到,并按超话积分规则完成加分任务(浏览帖子、评论 0 评论帖、发帖)。
代码位于 scripts/,是一套完整的 Python 命令行工具,通过微博网页私有接口直连,不依赖浏览器(扫码登录除外)。
何时使用
- 用户要求「跑一下微博超话签到」「超话打卡」「超话每日任务」
- 用户要求完成超话加分 / 冲「超like」等级 / 攒 jyz 积分
- 用户提到 Cookie 失效、需要重新扫码登录
- 定时任务(每日 09:00)触发时的执行依据
环境要求
- Python 3.8+,依赖见
scripts/requirements.txt(requests、PyYAML;selenium仅在用 Selenium 登录备选通道时才需要) - 若 venv 不存在,在
scripts/下建一个并pip install -r requirements.txt - 本机已知:Selenium 不可用(chromedriver 与 Chrome 补丁号不匹配 + BiDi
unhandled request)。
扫码登录一律用main.py qr-login(服务端直连,无需浏览器),不要改用login。
Cookie 处理
- 凭证文件是
scripts/cookie.json,等同于登录凭证。 - 禁止在回复、日志、代码输出中展示其内容,也不要提交到仓库。
- 首次使用或退出码为 1(失效)时,必须由用户本人用微博 App 扫码,无法自动化:
<python> scripts/main.py qr-login
会在scripts/下生成qrcode.png,需在约 5 分钟内用微博 App 扫描,过期会提示重扫。
可加--timeout 300延长等待。 - 若用户机器上已有一份可用的
cookie.json(例如早先的 weibo-checkin 项目),可直接复制到
scripts/下复用,省去一次扫码。复制后先跑check验证。
命令
在 scripts/ 目录下执行:
| 命令 | 作用 |
|---|---|
<python> main.py run |
执行一次签到(默认命令) |
<python> main.py tasks |
执行每日加分任务:浏览 + 评论 + 发帖 |
<python> main.py browse |
只执行浏览帖子任务 |
<python> main.py comment |
只执行评论 0 评论帖任务 |
<python> main.py post |
只执行超话发帖任务 |
<python> main.py check |
只校验 Cookie 是否有效 |
<python> main.py qr-login |
生成二维码扫码登录(首选) |
<python> main.py install-task |
注册 Windows 每日计划任务 |
退出码:0 全部成功 / 1 Cookie 失效或缺失 / 2 存在失败项。
执行流程
- 先跑
main.py run完成签到。
- 退出码 1 → Cookie 失效,停止后续步骤,提醒用户扫码(见上)。
- 退出码 2 → 有失败项,记录名称与原因,仍可继续加分任务。 - 再跑
main.py tasks完成加分任务。全程约 8 分钟(浏览 40 帖、每帖间隔 5–12 秒是大头),
属正常耗时,不要中断。 - 从
scripts/logs/checkin_<YYYYMMDD>.log读明细并向用户汇报:
- 签到:超话总数 / 成功 / 已签过 / 失败
- 加分任务:浏览、评论、发帖各自的成功数与失败数 - 汇报保持简洁:一行结论 + 必要明细。有失败项时列出名称与原因。
约束(务必遵守)
- 不得调低
config.yaml里的interval.min_seconds/max_seconds(默认 2.0 / 5.0),
以及tasks.action_min_seconds/action_max_seconds(默认 5.0 / 12.0)。
低于 1.5 秒会触发微博风控。 - 评论与发帖是公开留痕行为。文案在
config.yaml的tasks.comment_templates与
tasks.post_templates({topic}会替换为超话名称)。执行前若用户没指定过文案,
先告知将使用默认文案;用户可随时自行修改。 - 命令执行异常或日志缺失时,如实说明未验证项,不要臆造结果。
已知限制(不必重复排查)
- 「发帖求 20 个不同人回复」无法自动化:需要 20 个真实用户参与。不要尝试,向用户说明即可。
- 无法按板块筛帖:「田田向上」等板块仅微博 App 有,网页端
channelInfo.data.channels为 null。
评论任务是从主信息流筛comments_count == 0的帖子,不在指定板块内。 - 0 评论帖可能找不到:活跃超话里很稀疏(实测约 1/48)。找不到时会记 WARNING 并跳过,属正常。
- 积分上限未实测。按「签到 6~8 + 浏览 4 ≈ 每天 10~12 分」估算一周 70~84 分,仅供参考。
排错
| 现象 | 原因 / 处理 |
|---|---|
| 退出码 1 | Cookie 失效,让用户跑 qr-login 扫码 |
| 评论报「评论内容不能为空」但内容非空 | 参数名写成了 content,正确的是 comment |
写操作 403 missing csrf token |
没带 XSRF-TOKEN,或带了没合并进 Cookie 请求头(session headers 会覆盖 cookie jar) |
| 签到被误判为失败、退出码恒为 2 | code 是字符串,需 _as_int() 归一化 |
| 浏览跑完但积分没涨 | 阅读上报没生效,核对 ajax/log/read 是否仍返回 ok:1 |
响应不是 JSON |
基本等同登录态失效,重新扫码 |
完整接口参数与踩坑记录见 references/api-notes.md——修改任何接口调用前先读它,
那里有逐条实测结论和抓包方法,能避免重复试错。
测试
<python> -m unittest discover -s tests -v
离线运行,不依赖网络和真实 Cookie,覆盖配置合并、Cookie 存取、三种签到响应解析、
帖子流去重、0 评论帖筛选、阅读上报、评论/发帖参数、CSRF 合并与四个子命令的编排。