给我弄一个每天早上8点点开飞书打卡的脚本

HAMI_9681577404 · 1 天前

回答

Hamibot AI
1
· 1 天前

以下是每天早上8点自动打开飞书打卡的脚本:

// 文档地址 https://docs.hamibot.com/

/**
 * 飞书自动打卡脚本
 * 每天早上8:00自动打开飞书并尝试打卡
 */

// ==================== 配置 ====================
var CONFIG = {
    // 打卡时间(24小时制,时, 分)
    hour: 8,
    minute: 0,
    
    // 飞书包名
    feishuPackage: "com.ss.android.lark",
    
    // 等待时间(毫秒)
    launchWait: 5000,
    pageWait: 3000,
    
    // 打卡按钮关键词
    checkInKeywords: ["打卡", "上班", "签到", "考勤"]
};

// ==================== 工具函数 ====================

function log(msg) {
    console.log("[飞书打卡] " + msg);
    toast(msg);
}

function waitForSecond(sec) {
    sleep(sec * 1000);
}

// 获取下次运行时间
function getNextRunTime() {
    var now = new Date();
    var target = new Date();
    target.setHours(CONFIG.hour);
    target.setMinutes(CONFIG.minute);
    target.setSeconds(0);
    target.setMilliseconds(0);
    
    // 如果今天时间已过,设为明天
    if (target <= now) {
        target.setDate(target.getDate() + 1);
    }
    
    return target;
}

// 格式化时间显示
function formatTime(date) {
    var h = date.getHours();
    var m = date.getMinutes();
    return (h < 10 ? "0" + h : h) + ":" + (m < 10 ? "0" + m : m);
}

// ==================== 核心功能 ====================

// 启动飞书
function launchFeishu() {
    log("正在启动飞书...");
    
    // 先关闭可能存在的飞书进程
    killApp(CONFIG.feishuPackage);
    waitForSecond(1);
    
    // 启动飞书
    var result = launch(CONFIG.feishuPackage);
    if (!result) {
        // 尝试用应用名称启动
        result = launchApp("飞书");
    }
    
    if (!result) {
        log("启动飞书失败,请检查是否已安装");
        return false;
    }
    
    log("飞书已启动,等待加载...");
    waitForSecond(CONFIG.launchWait / 1000);
    return true;
}

// 尝试点击打卡按钮
function tryCheckIn() {
    log("寻找打卡按钮...");
    
    // 尝试多种方式查找打卡按钮
    for (var i = 0; i < CONFIG.checkInKeywords.length; i++) {
        var keyword = CONFIG.checkInKeywords[i];
        
        // 方式1:通过文本查找
        var btn = text(keyword).findOne(2000);
        if (btn && btn.clickable()) {
            log("找到按钮: " + keyword);
            btn.click();
            return true;
        }
        
        // 方式2:通过描述查找
        btn = desc(keyword).findOne(1000);
        if (btn && btn.clickable()) {
            log("找到按钮: " + keyword);
            btn.click();
            return true;
        }
        
        // 方式3:包含文本
        btn = textContains(keyword).findOne(1000);
        if (btn && btn.clickable()) {
            log("找到包含按钮: " + keyword);
            btn.click();
            return true;
        }
    }
    
    // 方式4:尝试点击考勤相关图标
    var attendance = descContains("考勤").findOne(1000);
    if (attendance) {
        attendance.click();
        waitForSecond(2);
        // 再次尝试找打卡按钮
        return tryCheckIn();
    }
    
    log("未找到打卡按钮,可能需要手动操作");
    return false;
}

// 保持屏幕常亮并解锁(需要配置自动解锁或保持解锁状态)
function prepareDevice() {
    // 唤醒屏幕
    device.wakeUpIfNeeded();
    
    // 保持屏幕常亮
    device.keepScreenOn();
    
    // 注意:解锁需要额外配置,建议保持手机解锁状态
    // 或使用 Hamibot 的自动解锁功能
}

// ==================== 主流程 ====================

function main() {
    log("========== 飞书自动打卡启动 ==========");
    
    // 准备设备
    prepareDevice();
    
    // 启动飞书
    if (!launchFeishu()) {
        return;
    }
    
    // 尝试打卡
    var success = tryCheckIn();
    
    if (success) {
        log("打卡操作已执行,请确认结果");
        waitForSecond(3);
        
        // 截图保存(可选)
        // captureScreen("/sdcard/feishu_checkin_" + new Date().getTime() + ".png");
    } else {
        log("自动打卡失败,请手动完成");
    }
    
    // 取消屏幕常亮
    device.cancelKeepingAwake();
    
    log("本次任务结束");
}

// ==================== 定时调度 ====================

function scheduleNext() {
    var nextTime = getNextRunTime();
    var delay = nextTime.getTime() - new Date().getTime();
    
    log("下次运行时间: " + formatTime(nextTime) + " (" + Math.round(delay / 1000 / 60) + "分钟后)");
    
    // 使用 setTimeout 或循环等待
    setTimeout(function () {
        main();
        // 完成后重新调度
        scheduleNext();
    }, delay);
}

// ==================== 启动入口 ====================

// 立即执行一次测试
// main();

// 启动定时调度
scheduleNext();

// 保持脚本运行
setInterval(function () {}, 1000);

使用说明

配置项 说明
hour: 8, minute: 0 每天早上8:00执行
feishuPackage 飞书包名,一般无需修改
checkInKeywords 打卡按钮可能显示的文字

注意事项

  1. 保持解锁:建议设置手机不锁屏,或配合自动解锁脚本
  2. 后台运行:Hamibot 需要保持后台运行
  3. 首次测试:先注释掉 scheduleNext(),取消注释 main() 测试效果
  4. 界面适配:不同版本飞书界面可能不同,可能需要调整查找逻辑

如需更精确的打卡(如定位打卡、WiFi打卡),需要额外配置。参考文档:https://docs.hamibot.com/

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