吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 36191|回复: 402
收起左侧

[Android] [AUTOJS]钉钉自动打卡

    [复制链接]
Piz.liu 发表于 2022-6-23 17:16
本帖最后由 Piz.liu 于 2022-8-5 13:18 编辑

刚搜东西看到了[Android] 钉钉自动登录(daka)工具,免root,支持安卓这篇文章 ,然后看到了下面这个评论,并且评论里问题很多
各位同志都不看一眼吗?都没用就瞎评论!这软件能用???谁来解释下我的问题:
1、手机必须关闭自动锁屏,这一般手机就没办法;
2、手机常亮的话是不是不安全,上热加没电?
2、此自动登录器需手机常亮才可以运行,那我为什么不直接钉钉常亮,自动打卡?

我就分享一个我用的脚本吧,原理是一样的,我觉得我的脚本基本可以解决上面的问题
不过我这个前提是加入电池优化白名单,开启无障碍,开启应用自启 加个前台服务更稳定!
说明一下:
我的这个脚本不是一直亮屏的(我的这个手机没密码,直接亮屏就进系统了)
定时打开屏幕,自动打开钉钉(设置了极速打开),发送打卡结果到企业微信(关联微信会直接在微信接受消息)
可以设置随机时间  并不是总是一样的时间打卡
如果退出登录了会自动登录

后来又给领导写了带数字密码开锁的

手机偶尔抽风没打卡,害得我又跑公司打个卡,索性又写了个1分钟检查的脚本,每分钟就检查一次我是不是设置的立即打卡,如果设置了,就再调用一次打卡程序再次打卡

下面是我用的代码(自己写的比较乱)
[JavaScript] 纯文本查看 复制代码
//脚本执行时保持屏幕常亮,默认5分钟
var keepScreenOnMinutes = 5;

//随机休眠时间段
var randomSleepMinutes = 3;


//进入打卡流程
punchTheClock();

function punchTheClock() {
  //唤醒手机
  device.wakeUp();
  sleep(2 * 1000);

  //判断屏幕是否唤醒成功
  if (!device.isScreenOn()) {
    console.error("屏幕未唤醒,退出脚本");
    exit();
  }

  //脚本执行时保持屏幕常亮  5分钟
  device.keepScreenOn(keepScreenOnMinutes * 60 * 1000);

  //随机休眠
  var sleep_time = random(0, randomSleepMinutes * 60 * 1000);
  sleep(sleep_time);
  //打开钉钉
  console.log("打开钉钉");
  launchApp("钉钉");
  sleep(3 * 1000);

  //判断是否已登录
  if (id("tv_welcome_name").exists()) {
    console.error("钉钉未登录");
    //启动自动登录
    reLogin();
  }
  //自动打卡通知
  if (click("我知道了")) {
    console.log("自动打卡成功");
  }

  //点击忽略更新(如果有)
  if (click("暂不更新")) {
    console.log("点击暂不更新");
  }
  sleep(5 * 1000);

  //点击工作台
  console.log("点击工作台");
  clickMessage("工作台");
  sleep(1 * 1000);

  //点击考勤进入打卡页面
  console.log("点击考勤打卡");
  clickMessage("考勤打卡");
  sleep(2 * 1000);

  //判断是否休息日
  if (className("android.view.View").text("今日休息").exists()) {
    console.log("今日休息");
    back();
    launchApp("Auto.js");

    exit();
  }

  //需要手动点击打卡按钮的 可以添加在这里
  
  //点击 查看打卡结果
  console.log("查看打卡结果");
  var x = className("android.view.View").textContains("已打卡").find();
  if(x.length == 0){
        x = className("android.view.View").textContains("打卡时间").find();
  }
  var send_msg = "未打卡成功";
  if (x.length > 0) {
    send_msg = x[x.length-1].text();
  }   console.log("打卡结果:", send_msg);
  //发送结果到微信
  sendWeiChat(getdate() + " " + send_msg);
  //返回控制台(避免下次启动出错)
  back();
  //返回主页
  home();
  sleep(1000);
  //打开autojs
  launchApp("Auto.js");

  //关闭屏幕常亮
  console.log("关闭屏幕常亮");
  device.cancelKeepingAwake();
  console.log("打卡完成");
  exit();
}

function reLogin() {
  sleep(2 * 1000);
  //启动自动登录
  if (id("cb_privacy").exists()) {
    //勾选协议
    id("cb_privacy").click();
    id("et_pwd_login").setText("xxxxxxx");
    clickMessage("登录");
    console.log("登录成功");
    sleep(1 * 1000);
  }
}

//判断网络情况,如果没有网络,结束脚本运行
function internetCheck() {
  var url = "m.baidu.com";
  var res = http.get(url);
  if (res.statusCode != 200) {
    console.error("网络不可用");
    exit();
  }
}

//判断GPS是否可用,如果不可用,结束脚本运行
function gpsCheck() {
  importClass(android.location.LocationManager);
  importClass(android.content.Context);
  var locationManager = context.getSystemService(Context.LOCATION_SERVICE);
  if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
    console.error("GPS不可用,无法打卡");
    exit();
  }
}

//根据控件文字点击,如果点击失败,则说明打卡流程无法正常进行,结束脚本运行
function clickMessage(message) {
  var n = 3;
  var logo = false;
  while (n--) {
    if (click(message)) {
      logo = true;
      break;
    }
    sleep(1 * 1000);
  }
  if (logo == false) {
    console.error("点击" + message + "出错");
    exit();
  }
}

//向企业微信发送信息
function sendWeiChat(send_data) {
  var corpid = "xxxxx"; //企业id  自己改
  var corpsecret = "xxxxx"; //企业应用secret  自己改
  var HEADERS = { "Content-Type": "application/json ;charset=utf-8" };
  var r = http.get(
    "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" +
      corpid +
      "&corpsecret=" +
      corpsecret,
    {
      headers: HEADERS,
    }
  );
  var js = r.body.json();
  var token = js.access_token;
  var data = {
    touser: "@all",
    msgtype: "text",
    agentid: 1000003, //应用id  自己改
    text: { content: send_data },
    safe: 0,
    enable_id_trans: 0,
    enable_duplicate_check: 0,
    duplicate_check_interval: 1800,
  };
  var wechaturl =
    "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + token;
  http.postJson(wechaturl, data, { headers: HEADERS });
}

function getdate() {
  fdate = new Date();
  year = fdate.getFullYear();
  month = fdate.getMonth();
  day = fdate.getDate();
  return year + "-" + month + "-" + day;
}




下面是带锁屏密码的(不同手机需要调整一下滑动的轨迹)
[JavaScript] 纯文本查看 复制代码
//脚本执行时保持屏幕常亮,默认5分钟
var keepScreenOnMinutes = 5;

//随机休眠时间段
var randomSleepMinutes = 1;

//进入打卡流程
punchTheClock();

function punchTheClock() {
  //唤醒手机
  device.wakeUp();
  sleep(2 * 1000);

  //判断屏幕是否唤醒成功
  if (!device.isScreenOn()) {
    console.error("屏幕未唤醒,解锁手机");
    exit();
  } else {
    unlock();
  }

  //脚本执行时保持屏幕常亮  5分钟
  device.keepScreenOn(keepScreenOnMinutes * 60 * 1000);

  //随机休眠
  var sleep_time = random(0, randomSleepMinutes * 60 * 1000);
  sleep(sleep_time);
  //打开钉钉
  console.log("打开钉钉");
  launchApp("钉钉");
  sleep(3 * 1000);

  //判断是否已登录
  if (id("tv_welcome_name").exists()) {
    console.error("钉钉未登录");
    //启动自动登录
    reLogin();
  }
  //自动打卡通知
  if (click("我知道了")) {
    console.log("自动打卡成功");
  }

  //点击忽略更新(如果有)
  if (click("暂不更新")) {
    console.log("点击暂不更新");
  }
  sleep(5 * 1000);

  //点击工作台
  console.log("点击工作台");
  clickMessage("工作台");
  sleep(1 * 1000);

  //点击考勤进入打卡页面
  console.log("点击考勤打卡");
  clickMessage("考勤打卡");
  sleep(5 * 1000);

  //判断是否休息日
  if (className("android.view.View").text("今日休息").exists()) {
    console.log("今日休息");
    back();
    launchApp("Auto.js");

    exit();
  }

  //点击 查看打卡结果
  console.log("查看打卡结果");
  var x = className("android.view.View").textContains("已打卡").find();
  var send_msg = "未打卡成功";
  if (x.length > 1) {
    send_msg = x[1].text();
  } else if (x.length > 0) {
    send_msg = x[0].text();
  }
  console.log("打卡结果:", send_msg);
  //发送结果到微信
  sendWeiChat(getdate() + " " + send_msg);
  //返回控制台(避免下次启动出错)
  back();
  //返回主页
  home();
  sleep(1000);
  //打开autojs
  launchApp("Auto.js");

  //关闭屏幕常亮
  console.log("关闭屏幕常亮");
  device.cancelKeepingAwake();
  console.log("打卡完成");
  exit();
}

function reLogin() {
  sleep(2 * 1000);
  //启动自动登录
  if (id("cb_privacy").exists()) {
    //勾选协议
    id("cb_privacy").click();
    id("et_pwd_login").setText("0000");  //登录密码
    clickMessage("登录");
    console.log("登录成功");
    sleep(1 * 1000);
  }
}

//判断网络情况,如果没有网络,结束脚本运行
function internetCheck() {
  var url = "m.baidu.com";
  var res = http.get(url);
  if (res.statusCode != 200) {
    console.error("网络不可用");
    exit();
  }
}

//判断GPS是否可用,如果不可用,结束脚本运行
function gpsCheck() {
  importClass(android.location.LocationManager);
  importClass(android.content.Context);
  var locationManager = context.getSystemService(Context.LOCATION_SERVICE);
  if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
    console.error("GPS不可用,无法打卡");
    exit();
  }
}

//根据控件文字点击,如果点击失败,则说明打卡流程无法正常进行,结束脚本运行
function clickMessage(message) {
  var n = 3;
  var logo = false;
  while (n--) {
    if (click(message)) {
      logo = true;
      break;
    }
    sleep(1 * 1000);
  }
  if (logo == false) {
    console.error("点击" + message + "出错");
    exit();
  }
}

//向企业微信发送信息
function sendWeiChat(send_data) {
  var corpid = "xxxx"; //企业id  自己改
  var corpsecret = "xxxx"; //企业应用secret  自己改
  var HEADERS = { "Content-Type": "application/json ;charset=utf-8" };
  var r = http.get(
    "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" +
      corpid +
      "&corpsecret=" +
      corpsecret,
    {
      headers: HEADERS,
    }
  );
  var js = r.body.json();
  var token = js.access_token;
  var data = {
    touser: "@all",
    msgtype: "text",
    agentid: 1000005, //应用id
    text: { content: send_data },
    safe: 0,
    enable_id_trans: 0,
    enable_duplicate_check: 0,
    duplicate_check_interval: 1800,
  };
  var wechaturl =
    "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + token;
  http.postJson(wechaturl, data, { headers: HEADERS });
}

function getdate() {
  fdate = new Date();
  year = fdate.getFullYear();
  month = fdate.getMonth();
  day = fdate.getDate();
  return year + "-" + month + "-" + day;
}

// 解锁屏幕
function unlock() {
  device.wakeUp();
  if(isDeviceLocked()){
      sleep(500);
      swipe(400, 1800, 800, 230, 1000); //上滑轨迹 自己调整
      sleep(500);
      var password = "1100"; //这里输入你手机的密码
      for (var i = 0; i < password.length; i++) {
          var p = text(password[i].toString()).findOne().bounds();
          click(p.centerX(), p.centerY());
          sleep(100);
      }
   }
}

//判断是否有屏幕锁
function isDeviceLocked() {
  importClass(android.app.KeyguardManager);
  importClass(android.content.Context);
  var km = context.getSystemService(Context.KEYGUARD_SERVICE);
  return km.isKeyguardLocked();
}



这是我1分钟定时查询是否需要重新打卡的脚本(这个就是写了个接口,用redis存了一个字段值,1就再次打卡)
[JavaScript] 纯文本查看 复制代码
var res = http.get("http://xxx.xxx.xx/api?key=Piz.liu_dk");
if(res.body.string()=="1"){
  console.log("立即打卡")
  http.get("http://xxx.xxx.xx/set?key=Piz.liu_dk&value=0");
  var dk = require("定时打卡.js");
  dk.punchTheClock();
}else{
    console.log("不打卡");
}




如果不是自动打卡,需要点击打卡按钮 ,可以在代码最后添加上下面的方法,然后在代码中间 查看打卡结果 之前加上 clickDK();

[JavaScript] 纯文本查看 复制代码
function clickDK() {
  var n = 3;
  var logo = false;
  while (n--) {
    if (click("上班打卡") || click("下班打卡")) {
      logo = true;
      sleep(2 * 1000);
      break;
    }
    sleep(1 * 1000);
  }
  if (logo == false) {
    console.error("点击打卡出错");
    exit();
  }
}


因为没有自己写定时任务(也是怕自己打包的程序权限没开够,被杀掉进程所以用了autojs自带的,这样稳定一点)
不会用的小伙伴看下面的图
使用步骤
百度下载autojs(4.x版本是免费的)   
1.打开相关权限
2.在页面添加脚本,复制修改后的脚本保存
3.在脚本列表右边的三点里面有更多里面有定时任务 设定要打卡的时间就行了
   如果不需要打开通知企业微信的,可以注释掉  //  sendWeiChat(getdate() + " " + send_msg);  这一行
4.设置完成可以在"管理"(pro在那个图二那个里面)可以看到是否添加成功
5.需要自己修改的地方 我已经在代码后面写了自己改的备注
6.完成之后,在脚本列表运行一下,看看是否正常
1.jpg 2.jpg 3.jpg

免费评分

参与人数 65吾爱币 +59 热心值 +55 收起 理由
Mr_豆先森 + 2 + 1 大佬真的,泰裤辣!
kennethyang + 1 谢谢@Thanks!
X1u + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Pugss + 1 谢谢@Thanks!
乱の舞 + 1 + 1 谢谢@Thanks!感谢你的分享,这样打卡会不会被钉钉检测到?
templefour + 1 + 1 谢谢@Thanks!
正义之拳刘波 + 1 谢谢@Thanks!
kingc138 + 1 我很赞同!
Voldmort + 1 + 1 谢谢@Thanks!
sadboy + 1 鼓励转贴优秀软件安全工具和文档!
WSYJJ + 1 + 1 谢谢@Thanks!
xmcy002 + 1 + 1 热心回复!
cjdfx888 + 1 + 1 用心讨论,共获提升!
之八十 + 1 热心回复!
alkaidz0 + 1 热心回复!
phoenixlhs + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Justin + 1 + 1 热心回复!
mengfeixiao + 1 鼓励转贴优秀软件安全工具和文档!
hansion21 + 1 + 1 用心讨论,共获提升!
jio365 + 1 + 1 我很赞同!
小飞OoO + 1 + 1 我很赞同!
millie + 1 + 1 我很赞同!
heiyi110 + 1 用心讨论,共获提升!
pangmingyun + 1 + 1 谢谢@Thanks!
kinghost1028 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
mhtsqj + 1 + 1 谢谢@Thanks!
jejeboy + 1 你可能需要的是钉钉助手
我的朋友是土豪 + 1 + 1 谢谢@Thanks!
真无聊 + 1 + 1 用心讨论,共获提升!
johnshawn + 1 谢谢@Thanks!
happykuaikuai + 1 + 1 谢谢@Thanks!
dzc999 + 1 + 1 谢谢@Thanks!
艺举成名 + 1 + 1 谢谢@Thanks!
zhukei + 1 + 1 谢谢@Thanks!
寒狼 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
43991258 + 1 + 1 用心讨论,共获提升!
exilim + 1 + 1 非常棒,全然看不太懂,但是知道有这个打卡功能了
jeffrey_cao + 1 + 1 谢谢@Thanks!
detoa + 1 用心讨论,共获提升!
痒脚丫 + 1 + 1 我很赞同!
呱呱呱呱呱皮 + 1 热心回复!
Lsygood + 1 + 1 这代码&amp;amp;#128077;
fjs4839 + 1 我很赞同!
行者orz + 1 + 1 热心回复!
yankyue + 1 + 1 谢谢@Thanks!
visin1799 + 1 谢谢@Thanks!
Crush1 + 1 + 1 用心讨论,共获提升!
一夕如初 + 1 + 1 谢谢@Thanks!
awdxszz + 1 + 1 热心回复!
solosawg + 1 + 1 我很赞同!
0785zhao + 1 + 1 谢谢@Thanks!
讲话 + 1 用心讨论,共获提升!
舒砚 + 1 + 1 热心回复!
Ta'ta + 1 + 1 用心讨论,共获提升!
阿木木不哭 + 1 + 1 我很赞同!
Redceyul + 1 + 1 鼓励转贴优秀软件安全工具和文档!
kxkxy5505 + 1 + 1 谢谢@Thanks!
pengmz + 1 + 1 人脸识别怎么破
风吹淡淡凉 + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
学是以致用 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
文鑫孤影130 + 1 + 1 热心回复!
一粒尘埃丶流年 + 1 + 1 谢谢@Thanks!
mo12345mo + 1 + 1 我很赞同!
sht281 + 1 + 1 谢谢@Thanks!
ezun069 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

那年夏天2017 发表于 2022-6-30 14:47
希望能封装成个APP、。。。。
wtl3949848 发表于 2022-6-24 09:07
 楼主| Piz.liu 发表于 2022-7-7 16:35
木木夕凡 发表于 2022-6-24 08:25
感谢大佬,作为一个伸手党,很需要一个能直接用的软件~~~
 楼主| Piz.liu 发表于 2022-6-23 17:21
补充一句  极速打卡节假日是不会打卡的
lg880824 发表于 2022-6-24 08:42
厉害  厉害
freedover 发表于 2022-6-24 15:14
autojs有免费版本吗?
menyhai 发表于 2022-6-24 08:39
这是脚本源码,怎么能直接使用呢?
ezun069 发表于 2022-6-24 08:34
谢谢分享!虽然我还是不会用
icepeak101 发表于 2022-6-24 08:35
厉害厉害
jordansxm 发表于 2022-6-24 08:36
看这好复杂,我还是自己手动打卡吧
windgod489 发表于 2022-6-24 08:38
封装一下更好
sht281 发表于 2022-6-24 08:39
好实用,多谢楼主
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 提醒:禁止复制他人回复等『恶意灌水』行为,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-25 20:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表