2020-02-28

autojs钉钉 自动打卡 多线程 防卡死
//脚本与AUTOJS自带定时器配合使用(我使用的是4.1.1a Alpha2-armeabi-v7a-release,链接: https://pan.baidu.com/s/11HHEzmKAd_8Upsm7YryfNQ 提取码: 344w ),个别手机可能需修改个别代码!!!
for (i = 0; i < 3; i++) {//主程序循环3次 确保100%打卡
threads.start(function() { //多线程操作
do_main();
});
sleep(60 * 2 * 1000); //防死循环时间为2分钟,主程序do_main()一次循环时间超出2分钟就被强制结束,注意时间不能少于上班或下班打卡子程序正常循环一次(打卡子程序随机random设置时间长短与循环时间有密切相关)
threads.shutDownAll();
log(“防死循环时间到,结束全部进程”);
toast(“防死循环时间到,结束全部进程”);
}

//主程序
function do_main() {
var now_time = new Date();
var now_hours = now_time.getHours()
auto.waitFor(“fast”); //检查无障碍权限启动
bright_screen();
sleep(500);
unlock_screen();
sleep(500);
stop_app();
sleep(500);
is_login();
sleep(500);
in_kaoqin();
sleep(500);
if (now_hours <= 12) { //小于等于12点进入上班打卡
do_clock_in();
sleep(500);
} else {
do_clock_out()
sleep(500);
}
device.cancelKeepingAwake();
log(“主程序执行完毕,取消设备常亮”);
}

//子程序:
//1.亮屏// bright_screen()
//2.解锁//unlock_screen()
//3.结束钉钉//stop_app()
//4.是否登录//is_login()
//5.进入考勤页面//in_kaoqin()
//6.上班打卡//do_clock_in()
//7.下班打卡//do_clock_out()

//1.亮屏
function bright_screen() {
log(“进入亮屏子程序”)
device.wakeUpIfNeeded(); //唤醒设备
device.keepScreenOn(); //保持亮屏
log(“已唤醒”);
if (!device.isScreenOn()) {
log(“未唤醒”);
device.wakeUpIfNeeded();
bright_screen();
}
}

//2.解锁–安卓7.0及以上才能支持坐标操作
function unlock_screen() {
log(“进入解锁子程序”);
swipe(x1, y1, x2, y2, 1000); //上划调出手势界面
sleep(1000);
gesture(1000, [x1, y1], [x2, y2], x3, y3]); //图案解锁
sleep(1000);
home();
sleep(500);
}

//3.结束钉钉进程,确保启动钉钉后进入主页面
function stop_app() {
log(“进入结束钉钉进程子程序”);
app.openAppSetting(“com.alibaba.android.rimet”); //进入钉钉设置
text(app.getAppName(“com.alibaba.android.rimet”)).waitFor();
let is_sure = textMatches(/(强制.*|.*停止|.强行)/).findOne();
if (is_sure.enabled()) {
sleep(1000);
textMatches(/(强制.
|.*停止|.确定)/).findOne().click();
sleep(1000);
textMatches(/(强制.
|.*停止|.*确定)/).findOne().click();
log(app.getAppName(“com.alibaba.android.rimet”) + “应用已被关闭”);
sleep(500);
home();
} else {
log(app.getAppName(“com.alibaba.android.rimet”) + “应用不能被正常关闭,重试”);
sleep(500)
home();
}
}

//4.判断是否未登录 部分需要手动修改代码
function is_login() {
log(“进入登录判定子程序”);
app.launchPackage(“com.alibaba.android.rimet”);
sleep(7000);
if (id(“et_pwd_login”).exists()) { //判定是否在登录页面
var 手机号码 = id(“et_phone_input”).findOne();
手机号码.setText(“此处填入手机或登录名”);
var 密码 = id(“et_pwd_login”).findOne();
sleep(1000);
密码.setText(“此处填入密码”);
id(“btn_next”).findOne().click();
info = “账号未登录>>已登录成功”
log(info)
} else {
if (className(“android.widget.RelativeLayout”).exists()) {
log(“账号已登录”)
sleep(500);
} else {
log(“未检测到钉钉活动页面>>重启钉钉”)
is_login();
}
}
}
//5.进入考勤页面
function in_kaoqin() {
log(“进入考勤页面切换子程序”)
if (anniu_gongzou = descMatches(/(.工作.)/).clickable(true).findOnce()) {
sleep(1000);
anniu_gongzou.click();
sleep(5000);
if (anniu_kaoqin = descMatches(/(.考勤打.|.勤打卡.)/).clickable(true).findOne()) {
anniu_kaoqin.click();
sleep(5000);
log(“进入打卡页面”);
} else {
sleep(500)
log(“未进入打卡页面”);
sleep(500);
in_kaoqin();
}
} else {
sleep(500)
log(“未进入打卡页面”);
sleep(500);
in_kaoqin();
}

}
//6.上班打卡
function do_clock_in() {
log(“进入上班打卡子程序”)
var randomtime = random(0, 60) * 1000
if (anniu_click_in = className(“android.view.View”).descMatches(/(.上班打.|上班打.)/).clickable(true).findOnce()) {
log(“可以打上班卡”);
sleep(1000);
descContains(“已进入”).waitFor();
log(randomtime / 1000 + “秒后执行”);
toast(randomtime / 1000 + “秒后执行”);
sleep(randomtime);
anniu_click_in.click();
desc(“我知道了”).waitFor();
sleep(1000);
desc(“我知道了”).findOne().click();
sleep(2000);
log(“按下打卡按钮,打卡成功”);
} else {
log(“未找到打卡上班按钮>>继续找”);
sleep(500);
let daka_ok = descMatches(/(.下班打.|下班打.
)/).findOnce()
if (daka_ok != null) {
log(“已出现下班打卡按钮,无需再按”)
sleep(1000);
home();
} else {
log(“未打卡,重试”);
do_clock_in();
}
}
home();
sleep(1000);
log(“脚本已执行完毕”);
}

//7.下班打卡
function do_clock_out() {
log(“进入下班打卡子程序”);
var randomtime = random(0, 60) * 1000
if (anniu_click_out = descMatches(/(.下班打.|下班打.)/).clickable(true).findOnce()) {
log(“可以打下班卡”);
sleep(2000);
descContains(“已进入”).waitFor();
log(randomtime / 1000 + “秒后执行”);
toast(randomtime / 1000 + “秒后执行”);
sleep(randomtime);
anniu_click_out.click();
desc(“我知道了”).waitFor();
sleep(1000);
desc(“我知道了”).findOne().click();
sleep(2000);
log(“按下打卡按钮,打卡成功”);
} else {
log(“未找到打卡下班按钮>>继续找”);
sleep(500);
let daka_ok = descMatches(/(.新打卡.|更新打.
)/).findOnce()
if (daka_ok != null) {
log(“已出现更新打卡按钮,无需再按”)
sleep(1000);
home();
} else {
log(“未打卡,重试”);
do_clock_out();
}
}
home();
sleep(1000);
log(“脚本已执行完毕”);
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值