本项目的所有重要更改都将记录在此文件中。
格式基于 Keep a Changelog, 版本号遵循 语义化版本。
- 新增原创征稿季活动自动化 (
src/yuanchuang.py)- 活动入口:https://yuanchuang.zaimanhua.com/2026spring/
- 使用手机端 UA 访问活动页
- 自动完成关注主办官号、分享页面、阅读参赛作品任务
- 阅读任务支持网页访问失败后回退到
auto_read.py的 API 模拟阅读 - 自动用完所有可用抽奖次数
- 明确不包含自动投票功能
- 新增原创征稿季 workflow (
yuanchuang.yml)- 北京时间 11:30 每天触发一次
- 支持手动触发
- API Base URL:
https://yuanchuang.zaimanhua.com - 活动入口:
https://yuanchuang.zaimanhua.com/2026spring/ - 签名:
sign = MD5(channel + timestamp + "z&m$h*_318345twt") - 端点:
draw_load(状态)、follow(关注)、share(分享)、drawing(抽奖) - 阅读任务优先尝试 Playwright 访问活动页/漫画详情页,未生效时回退到
ZaimanhuaAppReader.simulate_reading()
- 签到后自动领取"VIP福利"每日积分 (
src/checkin.py)- 新增
claim_vip_reward()函数,通过任务列表 API 检查并领取 VIP福利 (任务 ID=16,奖励 2 积分) - 非 VIP 账号自动跳过,不影响签到流程
- 签到主流程执行顺序:签到 → 领取签到积分 → 领取VIP福利
- 新增
- 2026 马年春节活动自动化 (
src/2026new_year.py)- 活动地址:https://activity.zaimanhua.com/newYear/
- 活动时间:2026.2.15 - 2026.2.23,每天 10:00-24:00
- 自动完成分享任务(API)
- 自动完成观看漫画任务(Playwright)
- 每次执行发送一条随机祝福弹幕获取抽奖机会
- 自动用完所有可用抽奖次数
- 20 条随机祝福语,避免重复
- 新年活动 workflow (
2026new_year.yml)- 北京时间 8:00-23:00,每 15 分钟触发一次
- 支持手动触发
- API Base URL:
https://activity.zaimanhua.com - 签名:
sign = MD5(channel + timestamp + "z&m$h*_159753twt") - 端点:
draw_load(状态)、share(分享)、add_comment(祝福)、drawing(抽奖) - 每次祝福可获得 1 次抽奖机会,通过高频 cron 实现多次祝福
- 日志显示账号真实用户名 (
src/utils.py,src/checkin.py)- 新增
_make_account_label()从 Cookie 提取 nickname/username - 日志标签格式:
默认账号 (张三)、账号 1 (李四)
- 新增
- Cookie 失效检测 (
src/utils.py)- 新增
validate_cookie()通过任务列表 API 验证 Cookie 有效性 - 所有脚本在执行任务前统一验证 Cookie
- Cookie 无效时输出明确错误信息并跳过该账号
- 新增
- 非零退出码支持 (
src/auto_read.py,src/lottery.py)- Cookie 失效或任务失败时以 exit code 1 退出
- 触发 GitHub Actions 内置失败通知邮件
- README 添加 Cookie 过期更新详细步骤
src/checkin.py:get_all_cookies()标签加入用户名,main()加入 Cookie 验证src/comment.py:main()加入 Cookie 验证src/auto_read.py:run_auto_read()加入 Cookie 验证,__main__加入 exit codesrc/lottery.py:main()加入 Cookie 验证 + 返回值,__main__加入 exit code
- 四周年活动自动化功能 (
src/draw_4th.py)- 活动地址:https://activity.zaimanhua.com/draw-4th/
- 活动时间:2026.1.16 - 2026.1.22
- 自动发送祝福弹幕
- 自动执行转盘抽奖(使用所有可用次数)
- 自动关闭中奖弹窗并显示奖品名称
- 四周年活动 workflow (
draw_4th.yml)- 北京时间 5:00-23:00,每 20 分钟触发
- 支持手动触发
- 使用移动端 UA 和 iPhone X 视口 (375x812)
- Cookie 域名设置为
activity.zaimanhua.com - 页面选择器:
- 弹幕输入框:
.dammu-input - 发送按钮:
.dammu-send-btn - 抽奖按钮:
.pointer - 抽奖次数:
.draw-count - 中奖弹窗:
.winPrize
- 弹幕输入框:
- 修复抽奖任务按钮定位问题 (
src/lottery.py)- 添加切换到"活动介绍"标签页的逻辑,确保在正确页面执行任务
- 更新按钮选择器为
.imgBoxP7 .btn1/btn2/btn3 - 改用按钮文本判断任务状态(比 API 字段更可靠)
- 调整页面加载等待策略 (
domcontentloaded+ 5秒)
- 签到后自动领取"到此一游"任务积分 (
src/checkin.py)- 新增
claim_checkin_reward函数 - 签到成功后自动检查并领取任务 ID=8 的积分奖励
- 新增
- 签到频率从每天 3 次改为每天 1 次(北京时间 8:00)
- 签到重试次数从 3 次增加到 5 次
- 修复任务领取 API "参数错误"问题 (
src/utils.py)claim_task_reward: 添加 POST + JSON body 方式传参- 尝试多种参数名 (
id,taskId,task_id) 提高兼容性 claim_rewards: 修复状态判断逻辑 (status==3→status==2)- 更新任务状态注释:
status=2为可领取,status=3为已领取
- 完善抽奖任务二(分享页面)的自动化流程 (
src/lottery.py)- 点击"去完成"后自动处理弹窗并点击复制按钮
- 修复之前只点击按钮但未完成弹窗交互的问题
- 新增
src/auto_read.py阅读脚本,使用 v4 API 模拟阅读- 通过 API 请求漫画章节图片实现阅读时长累计
- 支持任务 13(海螺小姐 - 累计观看十分钟漫画)自动化完成
- 智能任务状态监控,每分钟检查一次
- 支持 API 领取 + UI 领取双重回退机制
- 修复
checkin.yml执行失败问题(恢复被误删的src/checkin.py) - 修复
watch.yml缺少 playwright 依赖的问题 - 修复
comment.py任务状态判断逻辑status=2表示"可领取"而非"未完成"- 当任务状态为 2 时自动领取奖励并返回成功
- 用
auto_read.py替换原有的watch.py(已删除) - 更新 README.md,任务 13 现已支持自动化
- 更正文档中关于任务 13(累计观看十分钟漫画)与
ReadingDuration关系的表述- 明确:
ReadingDuration不是任务 13 的可靠计时/进度指标 - 将“网页端缺少可见的有效时长上报/心跳机制”作为当前可证据支撑的解释
- 覆盖:
README.md、src/watch.py、debug/INVESTIGATION_REPORT.md
- 明确:
-
修复评论任务验证逻辑 (
src/comment.py)- 增加对“未绑定手机号”账号的检测,自动跳过无法完成的任务(避免 CI 失败)
- 优化任务状态检查逻辑,优先检查任务 14 是否已完成
- 添加任务 API 验证,通过任务 ID=14 确认评论是否成功
- 修复
claim_rewards调用缺少cookie_str参数的问题 - 添加页面刷新确保 localStorage 登录状态生效
- 增强评论输入框和发布按钮的选择器兼容性
- 添加错误提示检测功能
-
修复 Windows GBK 编码问题 (
src/utils.py)- 将 Unicode 字符
✓/✗替换为 ASCII[OK]/[SKIP]
- 将 Unicode 字符
- 发现未绑定手机号的账号无法完成评论任务:
- 前端显示"评论成功",但评论不会真正发布
- API 任务状态保持 status=1(未完成)
- 这是网站业务限制,非脚本问题
- 建议:确保账号已绑定手机号以使用评论功能
- 更新
src/watch.py文档,说明任务 13(累计观看十分钟漫画)的技术限制 - 更新
README.md新增"每日阅读功能说明"章节,详细解释:- 任务 14(每日一读)可正常完成
- 任务 13(累计观看十分钟漫画)无法通过网页自动化完成
- 现象:网页端阅读可写入阅读位置,但未观察到稳定的“有效阅读时长”上报/心跳机制
- 更正:
ReadingDuration在多次查询中可能保持为 0,且与任务 13 的状态不严格对应,不能将其作为任务 13 的可靠计时依据 - 测试覆盖:桌面网站、移动端网站、模拟 APP 请求头均无法触发时长记录
- 结论:任务 13 是移动端 APP 专属功能,非脚本问题
- 修复评论功能多账号登录状态问题 (
src/comment.py)- 添加
init_localstorage调用确保 Vue 应用识别登录状态 - 在首页和漫画详情页均设置 localStorage
- 添加
- 调整
watch.yml超时时间 30 → 90 分钟,支持最多 5 账号串行执行 - 统一所有 workflow 的多账号配置,补全
COOKIE_4和COOKIE_5环境变量comment.ymlwatch.ymllottery.yml
- 每日抽奖功能 (
src/lottery.py)- 自动完成关注微博任务(需首次手动关注)
- 自动完成分享任务
- 自动完成阅读任务(复用 watch.py)
- 自动执行所有可用抽奖次数
- API 签名机制:
MD5(channel + timestamp + secret)
- 抽奖 workflow (
lottery.yml)- 北京时间 11:00 自动执行
- 支持手动触发
- 修复某些漫画翻章失败问题 (
src/watch.py)- 添加
is_valid_chapter_url()函数验证章节 URL 有效性 - 过滤掉包含
undefined占位符的无效章节 URL - 增加等待时间(2s → 3s)让 JS 完成渲染
- 输出跳过的无效章节数量便于调试
- 添加
- 修复阅读历史不同步问题 (
src/watch.py)- 发现正确的 API 端点:
POST /app/v1/readingRecord/add - 使用
Authorization: Bearer <token>头进行认证 - 在进入章节和翻章时主动调用 API 保存阅读进度
- 添加请求拦截以捕获和调试 API 调用
- 发现正确的 API 端点:
- 完善 README 文档结构和内容
- 每日评论功能 (
src/comment.py)- 自动在随机漫画下发表评论
- 避免重复评论同一漫画
- 完成后自动领取积分
- 每日阅读功能 (
src/watch.py)- 自动阅读漫画12分钟
- 智能跳过无效/付费章节
- 自动翻页和翻章
- 完成后自动领取积分
- 共享工具模块 (
src/utils.py)- Cookie 解析和 localStorage 设置
- 浏览器上下文创建
- 积分领取功能
- 独立的 GitHub Actions workflows
comment.yml- 每日评论(北京时间 9:30)watch.yml- 每日阅读(北京时间 10:00)
- 拆分原
daily_tasks.py为独立模块 - 优化跨域登录状态处理(localStorage 同步)
- 支持多账号签到(最多 5 个账号)
- 通过
ZAIMANHUA_COOKIE_1、ZAIMANHUA_COOKIE_2等环境变量配置多账号 - 向后兼容单账号
ZAIMANHUA_COOKIE配置
- 添加调试信息输出(Cookie 解析数量、页面标题、按钮状态)
- 优化已签到状态检测逻辑
- 按钮禁用时尝试 JavaScript 强制点击
- 失败时保存截图用于调试
- 修复已签到时按钮禁用导致的超时错误
- 初始版本发布
- 支持每天三次自动签到(北京时间 8:00、12:00、20:00)
- 使用 Playwright 模拟浏览器操作
- 通过 Cookie 认证登录状态
- 支持手动触发签到(workflow_dispatch)