回答
// 文档地址 https://docs.hamibot.com/
// 文档地址 https://docs.hamibot.com/
auto.waitFor();
// 1. 启动钉钉
app.launchApp("钉钉");
toast("正在打开钉钉...");
// 2. 等待主界面加载并点击底部“工作台”
var workbench = text("工作台").findOne(8000);
if (workbench) {
workbench.click();
sleep(2000);
} else {
toast("未找到工作台,请检查钉钉版本或界面布局");
exit();
}
// 3. 定位并点击“考勤打卡”
var attendance = text("考勤打卡").findOne(8000);
if (attendance) {
attendance.click();
sleep(3000);
} else {
toast("未找到考勤打卡入口");
exit();
}
// 4. 点击“上班打卡”按钮
var clockIn = text("上班打卡").findOne(10000);
if (clockIn) {
clockIn.click();
toast("已执行上班打卡");
} else {
toast("未找到打卡按钮,可能已打卡或页面未加载");
}
核心逻辑说明
auto.waitFor():确保无障碍服务已就绪,避免脚本启动时因权限未激活而报错。app.launchApp("钉钉"):通过应用名称直接拉起钉钉,无需依赖包名。text("xxx").findOne(timeout):使用 UI 文本选择器定位控件。设置超时时间可避免脚本在页面未加载时卡死。sleep():仅用于页面切换后的缓冲,核心等待逻辑已交由findOne(timeout)处理,提升执行效率。
稳定性优化建议
- 优先使用选择器:钉钉界面会随版本更新频繁调整,坐标点击极易失效。务必使用
text()、desc()或id()定位。若控件无文本,可在 Hamibot 控制台使用“布局分析”工具抓取className或bounds。 - 增加重试机制:网络延迟可能导致页面加载缓慢。可封装点击逻辑为函数,加入循环重试(最多 3 次),失败后自动退出并记录日志。
- 处理弹窗干扰:钉钉可能弹出“更新提示”、“权限申请”或“网络异常”弹窗。建议在脚本开头添加通用弹窗拦截逻辑,例如:
var updateBtn = text("立即更新").findOne(2000); if (updateBtn) updateBtn.click(); - 定时任务配置:在 Hamibot 控制台创建计划任务时,建议将执行时间设置为上班前 5~10 分钟,避开服务器高峰期导致的加载延迟。
调试与合规提示
- 使用 Hamibot 客户端的“实时调试”功能,在真机上逐步运行脚本,观察控件树变化,快速定位选择器失效原因。
- 自动化操作需符合企业考勤管理规定。部分企业后台会记录设备指纹与操作轨迹,请确保使用场景合规,避免触发风控。
如需针对特定钉钉版本或复杂页面结构(如多步验证、动态加载列表)进行适配,可提供具体控件特征,我将为你补充对应的选择器写法。
ℹ️ 内容由 AI 生成,可能不准确,请注意核实