回答
Hamibot 自动打卡实现方案
使用 Hamibot 实现自动打卡,主要有以下几种方式,你可以根据打卡应用的特点选择合适的方法。
方案一:控件查找方式(推荐)
如果打卡应用的按钮可以被控件识别,这是最稳定的方式。
// 文档地址:https://docs.hamibot.com/
auto.waitFor();
// 启动打卡应用
launchApp('钉钉'); // 或企业微信、飞书等
// 等待应用加载
sleep(3000);
// 查找打卡按钮并点击
let checkInButton = text('打卡').findOne(5000);
if (checkInButton) {
checkInButton.click();
toastLog('打卡成功');
} else {
// 尝试其他可能的文字
let alternateButton = text('上班打卡').findOne(3000) || text('签到').findOne(3000);
if (alternateButton) {
alternateButton.click();
toastLog('打卡成功');
} else {
toastLog('未找到打卡按钮');
}
}
方案二:坐标点击方式
如果控件无法识别,可以使用坐标点击。
// 文档地址:https://docs.hamibot.com/
auto.waitFor();
// 启动打卡应用
launchApp('钉钉');
sleep(3000);
// 点击打卡按钮坐标(需要根据实际设备调整)
Tap(540, 1200);
sleep(500);
// 确认打卡
Tap(540, 1500);
sleep(500);
toastLog('打卡完成');
提示:可通过手机「开发者选项」开启指针位置来确定准确坐标。
方案三:OCR 识别方式
如果界面元素无法通过控件或坐标定位,可使用 OCR 文字识别。
// 文档地址:https://docs.hamibot.com/
if (!requestScreenCapture()) {
toastLog('没有授予 Hamibot 屏幕截图权限');
hamibot.exit();
}
auto.waitFor();
launchApp('钉钉');
sleep(3000);
log('开始截屏');
const img = captureScreen();
toastLog('开始识别');
const res = ocr.recognizeText(img);
toastLog(res);
// 根据识别结果判断并点击
if (res.indexOf('打卡') !== -1) {
// 执行点击操作
Tap(540, 1200);
toastLog('打卡成功');
}
hamibot.exit();
定时任务设置
在 Hamibot 控制台设置定时任务,实现每天自动打卡:
- 登录 Hamibot 控制台
- 进入「脚本管理」创建打卡脚本
- 在「定时任务」中设置执行时间(如工作日 8:50)
- 绑定需要执行的设备
- 保存并启用任务
最佳实践建议
| 建议项 | 说明 |
|---|---|
| 优先使用控件查找 | 比坐标更稳定,适配不同屏幕 |
| 添加等待时间 | 每个操作后加 sleep() 确保界面加载完成 |
| 处理弹窗 | 添加代码处理权限请求、更新提示等弹窗 |
| 添加日志记录 | 使用 toastLog() 记录执行状态便于排查 |
| 测试验证 | 先在非工作时间测试脚本稳定性 |
| 网络检查 | 添加网络状态判断,避免无网时执行失败 |
注意事项
- 确保 Hamibot 已授予必要的权限(悬浮窗、截图、无障碍等)
- 不同手机品牌可能需要额外设置后台运行权限
- 打卡应用更新可能导致界面变化,需定期维护脚本
- 遵守公司考勤制度,自动化打卡需符合相关规定
如需进一步帮助,可在 Hamibot 控制台查看详细文档或联系技术支持。
ℹ️ 本回答由 AI 生成,内容仅供参考