[AUTOJS]钉钉自动打卡

17March

2:12 PM

289 次浏览

0 条评论

刚搜东西看到了[Android] 钉钉自动登录(daka)工具,免root,支持安卓这篇文章 ,然后看到了下面这个评论,并且评论里问题很多

各位同志都不看一眼吗?都没用就瞎评论!这软件能用???谁来解释下我的问题:
1、手机必须关闭自动锁屏,这一般手机就没办法;
2、手机常亮的话是不是不安全,上热加没电?
2、此自动登录器需手机常亮才可以运行,那我为什么不直接钉钉常亮,自动打卡


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

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

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

下面是我用的代码(自己写的比较乱)

[JavaScript] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
//脚本执行时保持屏幕常亮,默认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] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
//脚本执行时保持屏幕常亮,默认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] 纯文本查看 复制代码
1
2
3
4
5
6
7
8
9
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] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
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.完成之后,在脚本列表运行一下,看看是否正常
  


留言评论
称呼
邮箱
网址