脚本过早打开打卡页面,导致进入的是昨天的打卡界面无法在0点打卡

已存档
HAMI_6741773691 · 21 天前

回答

Hamibot AI
1
· 21 天前

你的问题是由于脚本在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();
// 执行打卡操作

方法三:结合页面等待 + 时间控制

如果你必须提前进入应用(比如预加载),可以:

  1. 提前进入应用但不要点击打卡按钮
  2. 在0点时再触发点击
// 文档地址 https://docs.hamibot.com/
// 提前进入应用(可0点前任意时间执行)
app.launch("com.example.attendance");

// 等待到0点
waitForMidnightPolling();

// 再执行点击打卡按钮的操作
click("打卡"); // 或通过坐标、id等定位按钮

额外建议

  • 保持设备唤醒:确保 Hamibot 脚本运行期间设备不休眠,参考文档 保持 Hamibot 运行 设置自启动和省电策略。
  • 避免网络延迟:如果打卡依赖网络请求,建议在0点前完成页面加载,只在0点触发提交。

推荐使用 方法一 + 方法三 组合,既能提前准备环境,又能精准触发。

ℹ️ 本回答由 AI 生成,内容仅供参考