回答
你的问题是由于脚本在0点前过早打开了打卡页面,导致加载了前一天的打卡界面,从而无法在0点完成打卡。
要解决这个问题,关键是精确控制进入打卡界面的时间,确保在时间到达0点时才执行打开或点击操作。以下是几种最佳实践:
方法一:使用 sleep 精确延迟到0点
计算当前时间到下一个0点的时间差,然后使用 sleep 等待,再执行后续操作。
// 文档地址 https://docs.hamibot.com/
/**
* 等待到下一个0点(即今天或明天的 00:00:00)
*/
function waitForNextMidnight() {
var now = new Date();
var next = new Date(now);
next.setHours(24, 0, 0, 0); // 设置为明天0点
var delay = next.getTime() - now.getTime(); // 计算毫秒差
sleep(delay);
}
// 等待到0点再执行打卡操作
waitForNextMidnight();
// 此处执行打开打卡页面或打卡动作
app.launch("你的打卡应用包名");
// 延迟一点确保应用启动
sleep(3000);
// 执行打卡逻辑...
方法二:轮询检查时间(更稳定)
有些系统对长时间 sleep 可能会中断(如休眠),可以采用短间隔轮询方式。
// 文档地址 https://docs.hamibot.com/
function waitForMidnightPolling() {
while (true) {
var now = new Date();
if (now.getHours() === 0 && now.getMinutes() === 0 && now.getSeconds() < 10) {
// 已进入0点的前10秒内,开始执行
break;
}
// 每500毫秒检查一次
sleep(500);
}
}
waitForMidnightPolling();
// 执行打卡操作
方法三:结合页面等待 + 时间控制
如果你必须提前进入应用(比如预加载),可以:
- 提前进入应用但不要点击打卡按钮
- 在0点时再触发点击
// 文档地址 https://docs.hamibot.com/
// 提前进入应用(可0点前任意时间执行)
app.launch("com.example.attendance");
// 等待到0点
waitForMidnightPolling();
// 再执行点击打卡按钮的操作
click("打卡"); // 或通过坐标、id等定位按钮
额外建议
- 保持设备唤醒:确保 Hamibot 脚本运行期间设备不休眠,参考文档 保持 Hamibot 运行 设置自启动和省电策略。
- 避免网络延迟:如果打卡依赖网络请求,建议在0点前完成页面加载,只在0点触发提交。
推荐使用 方法一 + 方法三 组合,既能提前准备环境,又能精准触发。
ℹ️ 本回答由 AI 生成,内容仅供参考