实现企业微信全自动 “无感知” 打卡
最近公司需要晚上企微打卡作为加班证据。于是乎就想着实现一个自动化企业微信打卡功能解放下班时间。
需求清单:
自动跳过节假日和调休打卡。
拒绝死板,在指定时间段内的随机时间打卡。
手机能自动亮屏、上滑、解开图案锁。
实践:
实践步骤:安卓机 → AI (生成脚本) → Hamibot(远程) 。
一台闲置安卓(我以 Android 16 / 系统 ColorOS16 为例)。
手机下载安装 Hamibot。Web 端注册配对,获取远程控制权限。
- 脚本编写,
脚本逻辑
调用 API 查今天是不是法定节假日 / 调休。
打卡时间随机延迟 0-5 分钟。
执行模拟上滑与手势路径(图案解锁)。
靠坐标解锁,靠文字识别自动点击(工作台 → 打卡 → 上班 / 下班打卡)。
脚本如下,佬友们可自定义修改第二、三步骤。目前的脚本逻辑是设置的 5 分钟随机时间,息屏下需绘制图案解锁。
/*
* 名称:企业微信自动打卡(智能节假日版)
* 功能:跳过节假日/周末 + 识别调休 + 随机延迟 + 强力解锁 + 自动打卡
*/
auto.waitFor();
var width = device.width;
var height = device.height;
// ================= 配置区 =================
// 1. 随机延迟时间 (分钟)
var maxDelayMinutes = 5;
// 2. 您的定制解锁坐标 (a -> b -> c -> d)
var unlockPoints = [
[302, 1429],
[628, 1421],
[636, 1746],
[274, 1766]
];
var punchText = "上班打卡";
// =========================================
function main() {
console.show();
log("脚本已启动,正在检查节假日...");
// --- 第一步:检查是否为节假日 ---
// 如果是假期或周末(且非调休),直接退出脚本
if (isHolidayOrWeekend()) {
log("今天是节假日或周末,无需打卡");
log("脚本自动退出");
sleep(3000);
exit();
return;
}
// --- 第二步:随机延迟 (模拟真人) ---
var delayTime = random(0, maxDelayMinutes * 60 * 1000);
log("今天是工作日,准备打卡");
log("随机延迟: " + (delayTime / 1000).toFixed(1) + " 秒");
sleep(delayTime);
log(">>> 延迟结束,开始行动");
// --- 第三步:执行解锁流程 ---
smartUnlock();
// --- 第四步:打开企业微信 ---
log("打开企业微信...");
launchApp("企业微信");
sleep(6000);
waitForPackage("com.tencent.wework");
// --- 第五步:寻找工作台 ---
var workbench = null;
for (var i = 0; i < 5; i++) {
workbench = text("工作台").findOne(2000);
if (workbench) break;
}
if (workbench) {
clickElement(workbench);
sleep(3000);
}
// --- 第六步:进入打卡应用 ---
log("寻找打卡图标...");
var checkInApp = text("打卡").findOne(5000);
if (checkInApp) {
clickElement(checkInApp);
log("进入打卡页面,等待加载...");
sleep(8000);
}
// --- 第七步:执行打卡点击 ---
log("寻找按钮: " + punchText);
var punchBtn = text(punchText).findOne(3000);
if (!punchBtn) punchBtn = descContains("打卡").findOne(2000);
if (punchBtn) {
clickElement(punchBtn);
toast("✅ 打卡指令已执行");
log("打卡成功!");
} else {
log("未识别到文字,执行坐标盲点兜底...");
click(width / 2, height * 0.65);
}
log("脚本运行结束");
sleep(3000);
}
// === 新增:节假日检查函数 ===
function isHolidayOrWeekend() {
// 获取今天的日期格式 YYYY-MM-DD
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth() + 1;
var day = date.getDate();
month = month < 10 ? '0' + month : month;
day = day < 10 ? '0' + day : day ;
var dateStr = year + '-' + month + '-' + day ;
var apiUrl = "http://timor.tech/api/holiday/info/" + dateStr;
log("正在查询日期: " + dateStr);
try {
// --- 关键修改点:添加 User-Agent 伪装 ---
var res = http.get(apiUrl, {
headers: {
"User-Agent": "Mozilla/5.0 (Linux; Android 10; Mobile) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.181 Mobile Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
}
});
// -------------------------------------
if (res.statusCode == 200) {
var json = res.body.json();
// API 返回值 type 类型:
// 0: 工作日, 1: 周末, 2: 节日, 3: 调休(要上班)
var type = json.type.type;
var name = json.type.name;
if (type == 0) {
log("API判定: 普通工作日");
return false; // 不跳过
} else if (type == 1) {
log("API判定: 周末 (" + name + ")");
return true; // 跳过
} else if (type == 2) {
log("API判定: 节假日 (" + name + ")");
return true; // 跳过
} else if (type == 3) {
log("API判定: 调休工作日 (" + name + ")");
return false; // 不跳过 (这是关键!周日调休上班)
}
} else {
log("API 请求失败,状态码: " + res.statusCode);
}
} catch (e) {
log("网络请求异常: " + e);
log("⚠️ 为了防止漏打卡,网络错误时默认视为工作日");
}
// 如果网络失败,默认返回 false (即视为工作日,确保安全)
// return false;
}
// === 智能解锁函数 ===
function smartUnlock() {
if (!device.isScreenOn()) {
log("屏幕熄灭,开始解锁...");
device.wakeUp();
sleep(2000);
log("执行上滑...");
gesture(300, [width / 2, height * 0.8], [width / 2, height * 0.1]);
sleep(1500);
log("绘制图案...");
gesture.apply(null, [2000].concat(unlockPoints));
sleep(3000);
}
}
function clickElement(uiobj) {
if (uiobj) {
if (uiobj.clickable()) {
uiobj.click();
} else {
var p = uiobj.parent();
if (p && p.clickable()) {
p.click();
} else {
click(uiobj.bounds().centerX(), uiobj.bounds().centerY());
}
}
}
}
main();
- Hamibot 配置脚本 + 定时任务。
实践效果:
(解锁那段被录制软件屏蔽成了黑屏)

常见问题:
强烈建议使用闲置机,隐私第一,且不打扰到日常机的使用。
hamibot 偶尔被误杀后台需要重新开启无障碍。
hamibot 开启的权限有哪些?
这是我运行整套流程给 app 开的权限,比较关注软件权限问题的佬友可以参考。






