我想写一个脚本,用于自动打卡

HAMI_5838480424 · 5 天前

回答

Hamibot AI
1
· 5 天前

要写一个自动打卡脚本,请按以下步骤操作(以通用考勤 App 为例):


1. 创建脚本

访问 脚本控制台 → 点击「创建脚本」→ 输入名称(如“自动打卡”)→ 创建。


2. 编写代码(基础模板)

// 文档地址 https://docs.hamibot.com/
auto.waitFor(); // 确保无障碍已开启

// ========== 配置区 ==========
const APP_NAME = "钉钉"; // 替换为你的考勤App名称(或包名)
const TIMEOUT = 5000;    // 元素查找超时(毫秒)

// ========== 工具函数 ==========
function waitForAndClick(keyword, timeout) {
    let btn = text(keyword).findOne(timeout || TIMEOUT);
    if (btn) {
        btn.click();
        sleep(1000);
        return true;
    }
    return false;
}

// ========== 主流程 ==========
toastLog("开始自动打卡");

// 1. 启动考勤App
app.launch(APP_NAME);
sleep(5000);

// 2. 进入打卡页面(根据实际界面调整)
if (!waitForAndClick("考勤打卡", 8000)) {
    toastLog("❌ 未找到打卡入口");
    exit();
}
sleep(3000);

// 3. 执行打卡(尝试多种关键词)
let clicked = false;
["上班打卡", "下班打卡", "打卡"].forEach(keyword => {
    if (!clicked && waitForAndClick(keyword, 3000)) {
        clicked = true;
        toastLog("✅ 已点击: " + keyword);
    }
});

if (!clicked) {
    // 备用方案:坐标点击(需通过布局分析获取)
    toastLog("⚠️ 尝试坐标点击");
    click(device.width / 2, device.height * 0.8); // 屏幕下方居中
    sleep(1000);
}

// 4. 验证结果
if (textContains("打卡成功").exists() || descContains("成功").exists()) {
    toastLog("🎉 打卡成功!");
} else {
    toastLog("❓ 未检测到成功提示,请检查界面");
}

// 返回桌面
home();

3. 关键适配步骤

a. 确定启动方式

  • 如果 App 名称无法启动,改用包名
    app.launch("com.alibaba.android.rimet"); // 钉钉包名
    

b. 获取准确控件信息

  • 打开 Hamibot 悬浮窗 →「布局分析」
  • 查看打卡按钮的 textdesc 或坐标
  • 替换代码中的关键词(如“考勤打卡”)

c. 处理特殊情况

  • 滑动解锁:在开头添加
    device.wakeUp();
    sleep(1000);
    swipe(device.width/2, device.height*0.8, device.width/2, device.height*0.2, 500);
    
  • GPS 定位等待:增加循环检测
    for (let i = 0; i < 10; i++) {
        if (!textContains("定位中").exists()) break;
        sleep(2000);
    }
    

4. 测试与调试

  1. 手动打开考勤 App 到首页
  2. 运行脚本,观察执行过程
  3. 查看「日志」定位失败步骤
  4. 根据实际界面调整关键词或坐标

💡 提示:首次运行建议加入 toastLog("步骤X") 便于跟踪。


5. 设置定时任务(可选)

  • 在脚本控制台点击「定时」
  • 添加 Cron 表达式(如上班打卡:0 30 8 * * 1-5

完成以上步骤后,你的自动打卡脚本即可稳定运行。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实