每天 100 积分,白嫖使我快乐。但打开客户端 → 点头像 → 找加油站 → 点领取,四步操作对懒人来说太累了。
于是写了这个脚本,让电脑替我卷。
一句话:每天自动帮你领 WorkBuddy 积分,你只需要保证电脑开着就行。
| 场景 | 没有脚本 | 有脚本 |
|---|---|---|
| 早上到公司 | 打开客户端 → 找入口 → 点领取 → 万一忘了 | 电脑自动领了,你甚至还在路上 |
| 周末在家 | "算了不领了" | 照领,白嫖不分休息日 |
| 换电脑 | 手动操作 | 双击 exe,30 秒搞定 |
- 轻量 — 去掉 OpenCV,仅用 Pillow + 本地离线 OCR(Win10/11 优先系统 winrt,否则 RapidOCR 兜底,均不上传数据)
- 本地优先 — 主流程(截图 → OCR → 点击)全在本机完成,不上传任何数据;只有接口兜底被触发时才向官方域名发一次 HTTPS 请求(见「接口兜底签到」,可关闭)
- 校准一次 — 跑一次校准后全走坐标点击,不依赖 OCR,最快最稳
- 自包含 — 打包成单文件 exe,其他电脑免装 Python、免联网
- 自动拉起 — WorkBuddy 没开?它帮你开
- 三层兜底 — ① 校准坐标 → ② OCR 文字锚定(界面漂移时)→ ③ 接口直签(GUI 完全放弃时),任意一层成功即完成签到
最省事:方式零(让 AI 一键部署) —— 装好 skill 后对 AI 说一句话,下载、安装、建自动化全自动。 想自己动手:走 方式一(下载安装包),解压即用;开发者或要改代码才需要方式二。
- 把本仓库里的
skill/workbuddy-daily-checkin/整个目录,复制到C:\Users\<你>\.workbuddy\skills\下 (最终形如C:\Users\<你>\.workbuddy\skills\workbuddy-daily-checkin\SKILL.md) - 重启 WorkBuddy
- 对 AI 说:「帮我装签到」
AI 会依次完成:查最新 Release → 下载并解压安装包到你选的目录 → 引导你做一次校准 → 问你想几点自动跑 → 建好每日自动化任务。之后每天说「签到」或「今天签到了吗」就行。
skill 脚本是纯 Python 标准库实现,零依赖;下载走 GitHub API 资产端点,支持断点续传与失败重试。 网络实在不通时 AI 会给你手动下载链接,解压到同一目录即可。
- 打开仓库 Releases 页面,下载最新版本的
WorkBuddy.zip - 解压到任意普通文件夹(不要放
Program Files等需要管理员权限的目录 —— exe 要向同目录的data/写日志) - 打开 WorkBuddy 客户端,双击
WorkBuddy校准.exe,按提示把鼠标依次移到 头像 → 回车、Buddy 加油站 → 回车、领取按钮 → 回车(左下角若弹"新版本就绪",移到它的 × 处回车,没有就输入skip) - 校准完成,之后每天双击
WorkBuddy签到.exe即可自动领取
跨电脑:复制解压后的整个文件夹即可;若分辨率/缩放/DPI 不同,重跑一次
WorkBuddy校准.exe重新校准。
需要 Git 和 Python 3.11(winrt 仅支持 ≤3.11;用 3.13 会自动切换 RapidOCR 兜底后端,打包体积更大):
git clone https://github.com/SkyblueeeLabs/WorkBuddy-Daily-Checkin.git
cd WorkBuddy-Daily-Checkin
setup.bat # 创建 .venv 虚拟环境 + 安装依赖(只需一次)
scripts\build_exe.bat # 打包,产物在 dist/dist/ 下得到 WorkBuddy签到.exe 与 WorkBuddy校准.exe,使用方式与方式一完全一致(在解压/构建出的目录里双击运行即可)。
WorkBuddy 自己养自己 —— 用 WorkBuddy 的自动化功能定时执行签到 exe:
- 已有
dist\WorkBuddy签到.exe(方式一下载 / 方式二构建均可) - 在 WorkBuddy 中创建自动化任务:
- 名称:自动签到
- 提示词:
执行 C:\你的路径\WorkBuddy-Daily-Checkin\dist\WorkBuddy签到.exe - 模型:选择任意可用模型即可(截图示例为
Hy4 preview,免费模型也够用) - 触发:每天 09:00(或自定义时间)
- 保存并启用。WorkBuddy 常驻即可,每天自动领积分
配置示例:
优势:不需要管理员权限、不需要 Windows 任务计划程序、配置在 WorkBuddy 内完成
# 右键以管理员身份运行
install_task.bat注册每天 09:00 自动签到(需保持电脑解锁状态)。
GUI 自动化终究依赖界面:菜单项增减、DPI 变化、弹窗遮挡、OCR 偶发抽风,都可能让它中途放弃。所以内置了接口兜底——不碰界面,直接走官方签到接口。
流程
- 取得登录态凭据
accessToken+uid(src/wb_credential.py,见下节) (%LOCALAPPDATA%\CodeBuddyExtension\Data\Public\auth\workbuddy-desktop.info) - 查状态:
POST /v2/billing/meter/checkin-activity-status - 仅当今日未签时调用:
POST /v2/billing/meter/daily-checkin(接口幂等,不会重复领) - 主域
copilot.tencent.com不通时自动切换备域www.codebuddy.cn→www.workbuddy.cn
触发时机:只在 GUI 流程确认放弃时触发(找不到加油站入口 / 找不到领取按钮 / 状态判定失败 / 顶层异常),默认开启。GUI 正常走完时全程不会发任何网络请求。
| GUI 主流程 | 接口兜底 | |
|---|---|---|
| 依赖 | 窗口、坐标、OCR、屏幕未被占用 | 仅需本机登录态 + WorkBuddy 客户端在运行 + 网络 |
| 优点 | 完全模拟真人,不触碰账号接口 | 免疫界面改版,快且稳 |
| 风险 | 界面漂移 / 弹窗遮挡会失败 | 调用的是非公开内部接口,可能变更或下线 |
开关(src/main.py 的 CONFIG)
| 字段 | 说明 | 默认 |
|---|---|---|
api_fallback |
是否启用接口兜底;设 False 则完全走 GUI |
True |
api_base |
主域名;留空则用 copilot.tencent.com |
"" |
自检:排查凭据链路时跑 WorkBuddy签到.exe doctor(或源码 python src/main.py doctor),
输出只含运行时路径、凭据格式、到期时间、是否需要人工介入,不含任何 token 内容。
WorkBuddy 5.6.2 起,登录态里的 auth.accessToken / auth.refreshToken /
account.nickname / account.phoneNumber 四项从明文换成了 AES-256-GCM 加密信封:
{ "$wbEncrypted": 1, "envelope": "<base64>" }所以「读文件拿 token」的老办法在 5.6.2 之后必然失效。本项目的做法是不去拿密钥,而是借持有密钥的进程干活:
- 把 WorkBuddy 自带的 Electron 运行时当作普通 Node 解释器(
ELECTRON_RUN_AS_NODE=1)拉起子进程; - 子进程内调用客户端自己注册的原生模块读出密钥派生值,按客户端同款规则就地解密;
- 明文仅通过 stdout 管道交回父进程,不落盘、不打印、不进日志;密钥用完即清零,进程一退即消失。
登录态信封 ──┐
├─→ 子进程(Electron 运行时,原生模块 → 派生密钥 → AES-256-GCM + AAD 解密)─→ stdout ─→ 父进程 ─→ HTTPS 请求
密钥(仅内存)─┘ ↑ 校验 keyId 不匹配即拒绝解密
派生与校验(keyId 与 ~/.workbuddy/keyblob 中的 protectorKeyId 一致,实测交叉验证):
protectorKey = SHA256(atRestSecretKey)
protectorKeyId = SHA256(protectorKey).hex[:16] # 必须等于 envelope.keyId,否则拒绝解密
安全边界
- token 只在本机读取,只经 HTTPS 发往上述官方域名,不写入日志、不落盘、不外传
- 解密脚本经 stdin 传入子进程,磁盘上不留任何脚本或密钥文件
- 日志仅记录结果(签到成功 +N 分 / 今日已签 / 跳过原因),不记录 token 与 uid
- 关掉
api_fallback后,程序回到零网络请求状态 - 走的是客户端自己的读态路径,不是绕过加密:客户端还能正常登录,这条路就成立
成长计划里的「派猫猫旅行 / 派 Buddy 去旅行」:把 Buddy 派出去,14 小时后回来领 510 积分。每天最多派遣 1 次(接口 daily_limit_reached 为权威)。它和签到共用同一份本机登录态与 Bearer 鉴权,但域名/路径不同、且是状态机 + 轮询,比签到更适合作后台定时巡检——不依赖屏幕唤醒,规避清晨锁屏 screen grab failed 的坑。
接口族(域名 www.workbuddy.cn,无 /v2 前缀;本机 Bearer token 直连已验证 HTTP 200):
| 用途 | 方法 | 路径 |
|---|---|---|
| 查状态(只读) | GET | /activity/growth/buddy/travel/status |
| 派出旅行 | POST | /activity/growth/buddy/travel/depart body {"location_id": N} |
| 领取积分 | POST | /activity/growth/buddy/travel/claim body {} |
状态机(服务端 state 为权威,脚本幂等、可高频轮询):
idle + !daily_limit_reached ──depart──→ traveling ──(1~4h)──→ arrived ──claim──→ 领 5~10 分 ──→ idle
idle + daily_limit_reached ───────────────────────────────────────────────────→ 今日收工
用法(模块 src/api_travel.py,CLI 在 skill 的 scripts/travel.py):
# 只读查状态
python travel.py status
# 巡检一次(auto:按 state 自动 depart / claim / 跳过)
python travel.py
# 强制派 / 强制领(调试)
python travel.py depart [N]
python travel.py claim接入自动化:建一个每天多个时间点(如 08:00 / 10:00 / 12:00 / 14:00 / 16:00 / 18:00 / 20:00 / 22:00)运行的 recurring 任务,每次执行 python travel.py(auto)。早晨 idle 自动派出,后续巡检点 arrived 自动领奖,traveling 自动跳过——全自动、不用记时间。
旅行接口同样是非公开内部接口(归腾讯所有,可能变更/下线),token 不落地,仅供个人学习自用,与签到共用同一份免责声明。
如果某天 WorkBuddy签到.exe 因弹窗遮挡、OCR 偶发异常等原因失败,程序内部已有三层兜底,逐级退让:
- OCR 文字锚定 — 校准坐标因菜单项增减而漂移时,改用 OCR 搜索「Buddy加油站 / 立即领取」文字重新定位
- 接口兜底 — GUI 确认放弃后,直调官方签到接口补领(见上一节,默认开启)
- AI 手动兜底 — 若你是用 方案 A(WorkBuddy 自动化) 调用的,AI 助手会读取退出码和日志,直接手动把剩余步骤点完,直到出现「签到已完成 ✅」
这正是推荐把 exe 挂在 WorkBuddy 自动化里的原因:脚本自身有兜底,AI 还能再兜底一次。
注:若长期失败,建议运行
WorkBuddy校准.exe重新生成data/calib.json,或从源码重新构建 exe 确保 OCR 依赖已正确打包。
WorkBuddy-Daily-Checkin/
├── src/ # 源码
│ ├── main.py # 核心逻辑(GUI 自动化主流程)
│ ├── wb_credential.py # 登录态凭据读取(明文 + 5.6.2+ AES-GCM 信封)
│ ├── api_checkin.py # 接口兜底签到(GUI 放弃时直调官方接口)
│ ├── api_travel.py # 派猫猫旅行(纯接口状态机)
│ └── teach_launcher.py # 校准入口
├── scripts/
│ ├── build_exe.bat # 打包 exe
│ ├── WorkBuddy签到.spec # 签到 exe 打包配置(含新模块 hiddenimports)
│ └── WorkBuddy校准.spec # 校准 exe 打包配置
├── doc/
│ ├── usage-guide.md # 详细使用指南
│ └── imgs/ # README 配图
├── setup.bat # 环境搭建(首次运行)
├── install_task.bat # 注册定时任务
├── teach.bat # 校准启动器
├── run_checkin.bat # 手动签到
├── requirements.txt # 依赖清单
├── .gitignore # Git 忽略规则
├── .venv/ # 虚拟环境(自动生成,不入库)
├── data/ # 运行时数据(自动生成,不入库)
└── dist/ # 打包产物(不入库)
唤醒 WorkBuddy
→ 最大化 + 置顶
→ 关闭「新版本就绪」弹窗(模板匹配)
→ 点击头像
→ 点击「Buddy 加油站」(OCR 锚定优先,失败回退校准坐标)
→ 判断「领取 / 今日已领」并操作
→ 弹窗通知结果(成功 / 已领 / 失败)
↳ 任一步确认失败 → 接口兜底(读本机登录态直调官方接口)
→ 成功 / 已领则正常通知;仍失败才报「签到失败」
| 包 | 说明 |
|---|---|
| pyautogui | 鼠标/键盘模拟 |
| pygetwindow | 窗口管理 |
| Pillow | 截图与图像处理 |
| numpy | 数组计算 |
| winrt | Windows 原生 OCR(首选) |
| rapidocr-onnxruntime | OCR 兜底(可选) |
接口兜底(src/api_checkin.py、src/wb_credential.py)零第三方依赖,
只用 Python 标准库(urllib / json / subprocess / winreg)。解密所需的 Electron 运行时直接借用 WorkBuddy 客户端自带的,无需额外安装。
src/api_checkin.py 的接口调用思路——登录态文件位置、两个签到接口路径、请求头构造方式——参考自社区开源项目 codeLong1024/workbuddy-checkin(MIT License,作者 codeLong1024)。本项目在其思路上按自身需要重写实现(幂等判定、多域名回退、重试策略、与 GUI 流程的衔接),未直接复制其源码,在此致谢。
src/wb_credential.py 的兼容思路(借 Electron 运行时在子进程内就地解密 5.6.2+ 的字段加密信封)参考自社区文章《WorkBuddy 升级了之后,自动签到断了?》(AI经纬线,2026-09-28)及其提到的开源项目 88lin/workbuddy-auto-signin(MIT License)。本项目未直接复制其源码:doctor 自检、多域名回退、stdin 传脚本(零落盘)、keyId 强校验、短缓存、与 GUI 主流程的衔接均为自行实现;AES-GCM 的 AAD 构造规则与密钥派生规则由本项目从客户端 app.asar 实测还原并交叉验证(派生 keyId 与 ~/.workbuddy/keyblob 中的 protectorKeyId 一致)。
- 非官方工具:所调用的是 WorkBuddy 客户端内部接口,归腾讯公司所有,可能随时变更或下线;本项目与腾讯公司无任何隶属、授权或合作关系。
- 仅供个人学习自用:禁止商业用途;使用前请自行评估并遵守相关服务条款与法律法规,风险由使用者承担。
- 按现状提供(AS-IS),不提供任何明示或默示的担保。
若你不希望调用非公开接口:把
CONFIG里的api_fallback设为False即可完全关闭,程序退回纯 GUI 流程(代价是 GUI 失败那天需要人工补领)。若客户端未来变更加密方案(
doctor会报DECRYPT_FAILED/KEY_UNAVAILABLE/SUITE_UNSUPPORTED),兜底会如实报错而不是谎报成功,此时需等待上游适配;GUI 主流程不受影响。
- 详细使用指南:doc/usage-guide.md
- 包含:校准详解、配置参考、跨电脑部署、任务计划程序配置、常见问题

