回答
以下是每天早上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 |
打卡按钮可能显示的文字 |
注意事项
- 保持解锁:建议设置手机不锁屏,或配合自动解锁脚本
- 后台运行:Hamibot 需要保持后台运行
- 首次测试:先注释掉
scheduleNext(),取消注释main()测试效果 - 界面适配:不同版本飞书界面可能不同,可能需要调整查找逻辑
如需更精确的打卡(如定位打卡、WiFi打卡),需要额外配置。参考文档:https://docs.hamibot.com/
ℹ️ 内容由 AI 生成,可能不准确,请注意核实