关于钉钉打卡的另一种实现思路

当众多的单位都在使用钉钉打卡的时候,释放的是单位领导的时间、空间和神经。马云在成功划开众多男女的钱包后,又开发出这款钉钉考勤,实在是有点太那个了,不仅让你足不出户,还能让你主动把钱包向他打开,在抓着你钱包的同时,又出来这款让上班族深恶痛绝的考勤,定位你的行踪,限制你的自由,免费为那些领导提供当年只有奸细和特务才做的工作,不是助纣为虐,至少也是狼狈为奸。你不用嫌话难听,你不信看看,单位挂得上号的领导,哪一个在钉钉考勤的名单里?可惜了那么多人才都是在助纣为虐,正是你们的大作,让上班族感觉幸福感骤然下降很多。听惯了领导在台上大讲,以单位为家,讲奉献精神,请问,为什么你要把自已的名字排除在单位团队之外?请问这个被要求有奉献精神的组织里,怎么不见你的大名?
发完牢騒再转到正题吧,钉钉软件做得真是不错,定位、联系人,待办事宜等等一应俱全。用全面、周到一点也不为过。可是人也是有事情的,不只是上下班打卡,不小心就会把这事忘脑后边了。等突然间想起来,时间已过,懊恼不已吧。想不想有一个功能帮你完成这个工作?
思路:
1、先做一个能模拟一系列手势的脚本
2、找一个定时的软件执行这个脚本
一切就OK了。可是没有这么简单的,我先后试了几款一键精灵之类的,不理想。这有多方面的原因:首先要ROOT,找了一些ROOT之类的,不仅不稳定,还给你安装上好多软件,我一贯称这种行为为流氓行为。很多著名的软件都存在这样的行为,是大流氓。大流氓有底线,小流氓没底线。其次,不能用太差的手机,运行起来也卡的很。再有,这几款都要注册,而且还会中途罢工要求加薪的,你明白的。后来也试过定时达人,虽然运行很准时,但是打卡成功率不高。没准头,有时候打卡成功,有时候就不知是什么原因了。总之都不太理想。
最近又试了一下,将手机与电脑连接,用adb shell 操作要准确很多。现在把操作过程写出来,请大家指正。
一、adb shell功能简介
adb shell 是一款用来调试的软件,(百度一下,会有很多介绍,关键是要把它存放的目录作为环境变量来处理,详细的做法也请百度)我们要用的是它的几个功能:
1.tap 点击
2.swipe划动
3.keyevent 3 手机主页
4.keyevent 4 返回
二、Uiautomatorview,具体用法请百度,我主要是用它进行各个关键点的定位和推算。首先,我把钉钉的启动图标放在了手机首页,用uiautomatorview就可以查看到它的位置信息:模坐标和纵坐标。记下这个坐标点。第二,启动钉钉,进入钉钉首页,再用Uiautomatorview找到几个关键点。进入“工作”页,你会发现钉钉人还是很牛的,把打卡的按钮做在一个页里,你用Uiautomatorview是不会找到内外勤管理坐标的。这时候,就要把思路做适当的调整了。点击消息铵钮,再用Uiautomatorview定位消息按钮的坐标。这个坐标很重要。因为同时它的横坐标是工作页中内外勤管理的横坐标,记下来吧,这个横坐标是用得上的。然后查看工作按钮的坐标,这个坐标也同样重要,因为进入打卡界面的时候,它的横坐标,都是是以它的横坐标为依据的。第三。接下来就是向个重点纵坐标的确定。这是一个比较麻烦的过程,而且由于不同手机分辨率不同,会造成打卡按钮的位置有许多差异。不过幸亏钉钉人把按钮做得较大,我们可以模糊定义纵坐标。
三、有了几个关键点,我们就可以计算钉钉打卡时的点击位置
    1.钉钉首页消息点击位置
      点击横坐标=消息横坐标+消息按钮宽度/2
      点击纵坐标=屏幕最大纵向高度-消息按钮高度/2
    2.钉钉工作点击位置
      点击横坐标=屏幕最大宽度/2 或者工作按钮宽度/2+工作按钮横坐标
      点击纵坐标=屏幕最大纵向高度-消息按钮高度/2
    3.内外勤按钮位置
      点击横坐标=消息横坐标+消息按钮宽度/2
      点击纵坐标=(屏幕最大高度-消息按钮高度)
    4.根据各单位设置打卡次数的不同,自已确定纵坐标位置,横坐标就是屏的中央位置,可参考消息页面       的模坐标。
    5.每次打卡后,都要返回手机主页面。
四、根据以上思路,选用了几款软件,脚本精灵,定时达人等类似软件,但是都不是太理想。最后还是确定用手机调试软件,ADB shell,这个从实用结果来看,稳定性还是非常高的。
五、具体用法:
    1.首先要编写打卡的shell脚本,现在给出我个人的一个脚本:
 input keyevent 3 //让手机返回主页面
 sleep 5
 input tap 135 1290 //点击钉钉app图标的位置
 sleep 10 //等待手机刷新出钉钉主页面
 input tap 540 1841 //点击钉钉工作按钮
 sleep 15 //等待钉钉调出内外勤管理页
 input tap 110 1010 //点击内外勤管理按钮
 sleep 15 //等待钉钉调出打卡页
 input tap 540 630 //点击打卡铵钮
 sleep 10 //等待钉钉返回打卡成功信息
 input keyevent 4 //返回内外勤管理页
 input keyevnet 4 //返回手机主页,等待下次打卡
     我把这个脚本放在了手机的 /mnt/sdcard/kqdk中,并将该脚本变更为可执行,已备调用。
 其它打卡位置根据自已手机的情况进行更改,然后进行命名,我的是dk01。
    2.定时打卡设置
    重点是让这个脚本一直在工作,亦是让其无休止的循环下去,每到特定时间,就去执行打卡脚本dk01.
    具体代码如下:
 while true //一直循环
 do  //循环体
 if [ “ ( d a t e +               / m n t / s d c a r d / k q d k / d k 01   f i   d o n e   / m n t / s d c a r d / k q d k m y k q d k       3. s h e l l n o h u p . b u s y b o x     n o h u p / m n t / s d c a r d / k q d k / m y k q d k > k q . o u t   / m n t / s d c a r d / k q d k r u n n i n g k q . s h ,       4. a d b s h e l l / m n t / s d c a r d / k q d k / r u n n i n g k q , e c h o " (date +%M%S)" = "0750" ];then //判断时间,调用打卡脚本         /mnt/sdcard/kqdk/dk01  fi  done  其它时间的设定,可参照这个脚本添加更改。然后放入手机/mnt/sdcard/kqdk中,命名为mykqdk变更属性为可执行。已备调用。     3.由于大多数手机都有自动清理功能,为了保证脚本的持续运行,要用到shell命令nohup.如果手机上没有这个命令,可下载busybox并安装,具体安装方法,请百度。  然后再写一个脚本如下:  nohup /mnt/sdcard/kqdk/mykqdk>kq.out  也保存在/mnt/sdcard/kqdk中,命名为runningkq.sh,并变更属性为可执行。     4.到这儿,就可以说是大功告成了。在adb shell 中执行/mnt/sdcard/kqdk/runningkq,就会为你自动考勤了。为了能查看,这些脚本是否在一直运行,可在循环体中加一行:echo " (date +%Y%m%d-%H%M)”,这样就可以通过cat kq.out确定你的脚本到定时时间后,是否一直在执行。
    5.最后还要说一说,手机长时间使用,由于各种原因,不得不进行重启,这时候,就不得不将手机再连接微机,用adb shell重启脚本。为了方便各位,再提供一款手机APP,Gscript lite,很是方便,安装完成后,根据说明(自行百度)将runningkq.sh再运行起来就行。
    6.再啰嗦一下,为了保证打卡成功,我还在微机上也进行了定时任务操作,这也上一个补充手段,编一段批处理,到时也会执行。不过,手机是一直和微机连着的,而且是允许调试。这儿就露一下这个批处理:
 adb shell sh /mnt/sdcard/kqdk/kq01
简单吧?
六、虽然是还算能完成考勤目的,但是的机还是必须要root,还是有一些不成熟啊,请懂android手机和shell的大神帮忙。如何才能保证root的稳定性,或者怎样才能让shell不受root的限制。手机能搜到很多Wifi热点,怎么用Shell命令,连接指定的热点。请大神们赐教。

猜你喜欢

转载自blog.csdn.net/qq_41735378/article/details/85338343