回答
在Android系统中,出于安全机制限制,完全黑屏(锁屏)状态下无法直接进行UI点击操作。Hamibot的标准实现方案是:定时唤醒屏幕 → 保持屏幕常亮或微亮 → 执行自动化打卡 → 完成后释放屏幕控制权让设备自动熄屏。以下是完整实现方案:
1. 完整脚本代码(Rhino 1.7.15 兼容)
// 文档地址 https://docs.hamibot.com/
// 习讯云定时打卡脚本
function main() {
// 1. 唤醒屏幕
device.wakeUpIfNeeded();
// 2. 保持屏幕常亮(单位毫秒,此处设为5分钟)
// 若希望省电且允许屏幕变暗,可替换为 device.keepScreenDim(300000);
device.keepScreenOn(300000);
// 3. 解锁屏幕(根据实际锁屏方式调整,建议测试机设为“无”或“滑动”)
unlockDevice();
// 4. 启动习讯云
launchApp("习讯云");
sleep(4000); // 等待应用冷启动
// 5. 执行打卡逻辑
performClockIn();
// 6. 清理状态并返回桌面
device.cancelKeepingAwake();
home();
toast("打卡任务执行完毕");
}
function unlockDevice() {
// 示例:上滑解锁(若为密码/图案锁屏,需使用 auto.waitFor() 配合输入逻辑)
swipe(device.width / 2, device.height * 0.85, device.width / 2, device.height * 0.15, 300);
sleep(1000);
}
function performClockIn() {
// 等待打卡按钮出现(超时5秒)
var clockBtn = text("打卡").findOne(5000);
if (clockBtn) {
clockBtn.click();
sleep(2000);
toast("已触发打卡");
} else {
// 备用方案:根据坐标点击(需自行抓包或录制获取准确坐标)
// click(device.width / 2, device.height * 0.6);
toast("未识别到打卡按钮,请检查页面状态");
}
}
main();
2. 定时任务配置
不建议在脚本内使用 setInterval 或死循环,应使用 Hamibot 控制台或客户端的定时任务功能:
- 将脚本保存并上传至 Hamibot 控制台。
- 进入「定时任务」→ 创建新任务 → 选择该脚本。
- 设置 Cron 表达式或可视化时间(例如每天
08:55执行)。 - 勾选「唤醒设备」选项(部分版本支持),确保定时触发时能正常拉起脚本。
3. 必要权限与系统设置
脚本稳定运行依赖以下权限,缺一不可:
- 无障碍服务:设置 → 无障碍 → 已下载的服务 → 开启 Hamibot。
- 后台弹出界面:设置 → 应用管理 → Hamibot → 权限 → 允许后台弹出界面。
- 电池优化白名单:设置 → 电池 → 电池优化 → 找到 Hamibot → 选择“不优化”。
- 锁屏设置:建议将测试机锁屏方式设为“无”或“滑动”。若必须使用密码/图案锁屏,需在脚本中补充
auto.waitFor()及密码输入逻辑。
4. 最佳实践建议
- UI 选择器适配:习讯云版本更新可能改变按钮文本或层级。使用 Hamibot 客户端的「布局分析」工具获取准确的
text()、id()或desc()选择器。 - 网络与加载延迟:打卡前增加
sleep(3000~5000)等待页面渲染,避免因网络延迟导致点击失效。 - 异常处理:可在
performClockIn()外层包裹try...catch,捕获异常后记录日志或发送通知,便于排查。 - 屏幕策略:若设备支持且你希望接近“黑屏”效果,使用
device.keepScreenDim()替代device.keepScreenOn(),可在保持自动化可用的同时降低功耗。
按上述配置部署后,脚本即可在指定时间自动唤醒设备、完成打卡并恢复待机。如需针对习讯云具体页面结构调整选择器,可提供当前页面的布局分析截图或控件信息,我将为你补充精准定位代码。
ℹ️ 内容由 AI 生成,可能不准确,请注意核实