让 WorkBuddy 自己给自己签到?一个"偷懒"程序员的自动化翻车实录
—— 以及一些可能对你有用的 Windows 自动化经验
先说结论:签到功能已经下线了(5月10号),所以这篇文章的原始动机已经没了�� 但是整个折腾过程还是挺有价值的,如果你也想在 Windows 上搞点自动化,可以参考下我的经验。
起因很简单——懒。每天打开 WorkBuddy 第一件事就是签到领积分,但经常忘。出差忘了、开会忘了、睡过头更忘了。然后某天突然灵光一闪:WorkBuddy 本身就能写代码跑脚本啊,我让它自己签不就完了?
第一次尝试:UI Automation(寄)
一开始想走"正经"路线,用 Windows UI Automation API 直接找到按钮控件再模拟点击。理论上这方案最优雅——不管窗口挪到哪,控件名不变就能找到。
然后报错了:
'tuple' object has no attribute 'Name'
折腾了半天发现是 Electron 应用的问题,控件树结构不稳定,有些控件压根拿不到。WorkBuddy 是 Electron 架构的,所以这条路上基本走不通。
结论:Electron 应用别用 UI Automation,浪费时间。
第二次尝试:坐标点击(能跑但有坑)
既然找不到控件,那就简单粗暴——直接算坐标。PyAutoGUI 模拟鼠标点击指定位置,思路就是:
1. 找到 WorkBuddy 窗口在哪(左上角坐标)
2. 算出按钮在屏幕上的绝对位置
3. 点它!
核心代码就几行:
import pyautogui import win32gui hwnd = win32gui.FindWindow(None, "WorkBuddy") left, top, right, bottom = win32gui.GetWindowRect(hwnd) # 按钮相对窗口的偏移 + 窗口位置 = 绝对坐标 pyautogui.click(left + 40, top + 781)
大坑来了:窗口位置会变!
上线第二天就出事了。看日志发现窗口位置从 (0,15) 变成了 (338,0),所有坐标全偏了,点了个寂寞。
解决方法倒是简单:每次执行前都重新获取窗口位置,动态算坐标。这样窗口爱飘哪飘哪,我都能追着点。
但这也暴露了坐标点击方案的致命弱点——太脆弱了。窗口大小变了、分辨率调了、DPI缩放改了,全得重新算。
配上定时任务,每天自动跑
脚本写好了,总不能每天手动跑吧。用 Windows 任务计划程序设个定时任务:
schtasks /create /tn "WorkBuddyCheckin" /tr "python C:\Users\xxx\checkin.py" /sc daily /st 08:00 /f
这里也有个坑:定时任务默认用 SYSTEM 用户跑,没有桌面权限,PyAutoGUI 根本点不动。必须改成"只在用户登录时运行"才行。
加了日志和截图,至少知道自己怎么死的
每一步都记日志、存截图。这样即使签到没成功,至少能从日志里看出是哪一步挂了。
[2026-06-11 08:21] 窗口位置: (338, 0) [2026-06-11 08:21] 步骤1: 点击头像 @ (378, 767) ✅ [2026-06-11 08:21] 步骤2: 点击积分按钮 @ (428, 677) ✅ [2026-06-11 08:21] 步骤3: 确认弹窗 @ (825, 411) ✅ [2026-06-11 08:21] 截图: checkin_debug_082136.png [2026-06-11 08:21] ✅ 签到操作完成
踩坑总结
❌ Electron 应用别用 UI Automation — 控件树不稳定,换个方案吧
❌ 坐标不能硬编码 — 窗口位置随时变,每次都要动态获取
❌ 定时任务要选"用户登录时运行" — 不然没有桌面权限,点不动
❌ 截图存了也白存 — 当前没法自动验证截图内容,得人工看(希望以后能加OCR验证)
❌ 签到功能5月10号下线了 — 所以这个脚本……已经没用了 ��
但是!这套方案本身是通用的
把签到逻辑换掉,就能做别的自动化:
• 每日数据报表自动生成
• 定时检查网页内容变化
• 自动备份指定文件夹
• 定时发邮件提醒
• 批量截图存档
模板要点: win32gui 定位窗口 → 动态算坐标 → pyautogui 模拟操作 → 每步加延时 → 截图存证 → 写日志 → schtasks 定时跑。
总之,自动化这个东西,"能用"比"优雅"重要。第一版翻车就换方案,硬编码不稳就改动态计算,一步步迭代出来的。虽然最后签到功能下线了,但过程中积累的经验——动态坐标、日志系统、定时任务配置——都是实打实可复用的。
希望这篇能帮到同样想偷懒的你 ��
#WorkBuddy# #自动化# #Python# #Windows定时任务#
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。