需要创建针对企业微信的脚本,需求如下:
在每个工作日上午7:30、下午14:00进行上班打卡;
在每个工作日中午12:10、下午17:40进行下班打卡。

HAMI_5075747190 · 17 小时前

回答

Hamibot AI
1
· 17 小时前

// 文档地址 https://docs.hamibot.com/
// 企业微信自动打卡脚本(Rhino 1.7.15 兼容版本)

var PACKAGE_NAME = "com.tencent.wework";

function isWorkday() {
var day = new Date().getDay();
return day >= 1 && day <= 5;
}

function getClockTypeByTime() {
var now = new Date();
var h = now.getHours();
var m = now.getMinutes();
var timeStr = (h < 10 ? "0" + h : h) + ":" + (m < 10 ? "0" + m : m);

if (timeStr >= "07:25" && timeStr <= "07:35") return "上班";
if (timeStr >= "12:05" && timeStr <= "12:15") return "下班";
if (timeStr >= "13:55" && timeStr <= "14:05") return "上班";
if (timeStr >= "17:35" && timeStr <= "17:45") return "下班";
return null;

}

function navigateToClockPage() {
app.launchPackage(PACKAGE_NAME);
waitForPackage(PACKAGE_NAME, 500);
sleep(2000);

var workbench = text("工作台").findOne(5000);
if (workbench) {
    workbench.click();
    sleep(1500);
} else {
    log("未找到工作台入口");
    return false;
}

var clockEntry = text("打卡").findOne(5000);
if (clockEntry) {
    clockEntry.click();
    sleep(2000);
    return true;
} else {
    log("未找到打卡应用入口");
    return false;
}

}

function doClock(type) {
log("准备执行" + type + "打卡");
if (!navigateToClockPage()) {
hamibot.exit();
}

var btn = textContains(type + "打卡").findOne(6000);
if (!btn) {
    btn = descContains(type + "打卡").findOne(3000);
}

if (btn) {
    var b = btn.bounds();
    click(b.centerX(), b.centerY());
    log("已点击打卡按钮");
    sleep(2000);

    var successTip = textContains("打卡成功").findOne(4000);
    if (successTip) {
        log(type + "打卡成功");
    } else {
        log("未捕获成功提示,请手动核对");
    }
} else {
    log("未找到" + type + "打卡按钮,可能已打卡或UI结构变化");
}

home();
hamibot.exit();

}

// 主执行逻辑
if (!isWorkday()) {
log("非工作日,跳过执行");
hamibot.exit();
}

var targetType = getClockTypeByTime();
if (targetType) {
doClock(targetType);
} else {
log("当前时间不在打卡容错窗口内");
hamibot.exit();
}


部署与使用建议

  1. 定时触发方式(强烈推荐)
    不要使用脚本内死循环轮询时间。请在 Hamibot 控制台为同一脚本创建 4 个定时任务:

    • 0 30 7 * * 1-5(工作日 07:30)
    • 0 10 12 * * 1-5(工作日 12:10)
    • 0 0 14 * * 1-5(工作日 14:00)
    • 0 40 17 * * 1-5(工作日 17:40)
      脚本内的时间窗口仅作触发容错,控制台定时更精准且大幅降低耗电。
  2. UI 选择器适配
    企业微信的“工作台”布局受企业管理员配置影响,不同版本或企业可能使用 iddesc 或动态文本。若 text("打卡") 失效:

    • 使用 Hamibot 的 布局分析工具 抓取实际节点的 iddesc
    • text("打卡") 替换为 id("xxx").findOne(5000)desc("打卡")
  3. 系统权限与保活

    • 授予 Hamibot 无障碍服务后台弹出界面悬浮窗 权限。
    • 在系统电池优化中将 Hamibot 和企业微信设为 无限制/白名单,关闭省电策略。
    • 锁定 Hamibot 后台,避免系统杀进程导致定时任务失效。
  4. 节假日与调休处理
    脚本仅按周一到周五判断工作日。中国法定节假日及周末调休需你手动在控制台暂停/启用对应定时任务,或接入第三方节假日 API 进行动态判断(需额外网络请求逻辑)。

  5. 执行环境说明
    脚本已严格适配 Rhino 1.7.15 引擎,未使用箭头函数、默认参数等不兼容语法。waitForPackagebounds().centerX() 调用方式符合 Hamibot 标准 API。

按上述步骤配置后,脚本可在指定时间自动完成企业微信打卡。如遇到 UI 节点定位失败,提供布局分析截图或节点属性,我可帮你调整选择器逻辑。

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