钉钉实现自动打卡

发布于 2020-06-15  12,464 次阅读


工具:

  1. 一台Android手机
  2. 一台unix系电脑-物理机(Mac/Linux/树莓派
  3. 电脑需要24小时开机

本文使用环境:

华为nova3一台,树莓派4b一台(centos7.9 aarch 64)

思路:

  1. 使用adb调试工具模拟点击
  2. 通过shell脚本实现自动化
  3. shell搭配crontab实现无人化
  4. shell搭配sendemail实现高可用

一、安装adb

首先先了解adb工具是什么:

Android 调试桥 (adb)
Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信。adb 命令可用于执行各种设备操作(例如安装和调试应用),并提供对 Unix shell(可用来在设备上运行各种命令)的访问权限。它是一种客户端-服务器程序,包括以下三个组件:

客户端:用于发送命令。客户端在开发计算机上运行。您可以通过发出 adb 命令从命令行终端调用客户端。
守护程序 (adbd):用于在设备上运行命令。守护程序在每个设备上作为后台进程运行。
服务器:用于管理客户端与守护程序之间的通信。服务器在开发机器上作为后台进程运行。
adb 包含在 Android SDK 平台工具软件包中。

#yum安装adb
yum install android-tools -y

#测试
adb devices
#List of devices attached
#MCQ4C18420007774	device

二、shell脚本

1> 主要部分是执行adb命令

#新建shell脚本
vim daka.sh

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

    #检测设备
    adb devices
    sleep 2s
    #亮屏
    adb shell input keyevent 26
    sleep 2s
    #返回桌面
    adb shell input keyevent 3 #HOME事件
    sleep 2s
    #返回主页
    adb shell input keyevent 3
    sleep 2s
    #点击指定坐标(USB链接方式
    adb shell input tap 540 1670
    sleep 5s
    #点击指定坐标(钉钉
    adb shell input tap 200 1400
    sleep 15s
    #点击指定坐标(多任务管理
    adb shell input tap 310 2215
    sleep 5s
    #点击指定坐标(清理任务
    adb shell input tap 540 2020
    sleep 5s
    #返回主页
    adb shell input keyevent 3 #HOME事件
    sleep 2s
    #熄屏
    adb shell input keyevent 26

#主要命令
#adb devices #设备检测
#adb shell input keyevent 26 #熄屏亮屏事件
#adb shell input keyevent 3 #HOME事件
#adb shell input tap x y #模拟点击事件
#模拟点击位置 x y 通过打开usb调试-显示指针位置 调试查看

2> 为了体现随机性,我们前置一个默认随机等待时间(每天同一时间打卡也太夸张了

#随机等待0-1700秒
after=$(($RANDOM%1700))

sleep $after

三、定时任务

这个很简单,设置一个时间启动脚本

#查看现有定时任务
crontab -l

#编辑定时任务
crontab -e

#上午8点半
30 8 * * *  /root/daka.sh
#报错请添加PATH
30 8 * * *  . /etc/profile;/bin/sh /root/daka.sh

这样,一个9点上班的任务就完成了

8点30启动,1700秒内随机打卡

四、监控和维护

在正式运行中,会出现很多问题。

比如数据线被扫地阿姨拔掉了,办公室断电了,断网了

遇到这种情况我们要及时知晓,方便补救

那么我们可以在执行定时任务的时候

自动发送监控邮件,来保证我们对系统运行的掌控

smtp就不多说了,还有端口之类的,网上很多,自行查阅

#安装sendEmail
yum install sendemail -y

编辑脚本
vim daka.sh

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

account='xxxxx@163.com'
smtp='smtp.163.com'
password='123456'
to='xxxxxxx@qq.com'
subject='自动打卡启动提示'
after=$(($RANDOM%1700))
content="自动打卡任务开始启动 |<br>任务目标:上班 |<br>预计将于$after秒/"`expr $after / 60`'分钟后执行 |'

sendemail -f $account -t $to -s $smtp -u $subject -o message-content-type=html -o message-charset=utf8 -xu $account -xp $password -m $content

这样每天我们就会收到提醒邮件

提醒我们系统已经运行

如果到了时间没有收到邮件

就要赶紧跑到公司打卡排查故障

那么如果是代码出现了问题怎么办呢?

我们可以通过$?来检测脚本执行情况

#检测运行案例

#亮屏
adb shell input keyevent 26
step1=$?

#返回桌面
adb shell input keyevent 3 #HOME事件
step2=$?

echo $setp1$step2

#如果运行成功,$?返回0,否则返回其他数值
#成功返回:0-0
#失败返回 255-255

同样,我们可以检测到脚本运行状态后

也可以发送邮件来监控是否执行成功

content="自动打卡任务已完成 |<br> 执行结果:$setp1-$step2"

sendemail -f $account -t $to -s $smtp -u $subject -o message-content-type=html -o message-charset=utf8 -xu $account -xp $password -m $content

结语:

认真上班通过劳动换取报酬

上班摸鱼才是从老板那赚钱

好好摸鱼,天天向上

抵制996,从我做起

/dog

写这篇文章的目的更多是学习,分享

不是让懒狗抄作业的

所以完整的代码我不会贴出来

截张图供参考,动手才能出技术

抄作业都懒得动手的懒狗给👴爬

更新:

  1. 云服务器也可以接usb,但是要有本地机器,所以脱裤子放屁的事少做
  2. iOS系统可以通过快捷指令直接执行,所以脱裤子放屁的事少做
  3. 设置钉钉的极速打卡,打开app自动打卡,所以脱裤子放屁的事少做
  4. 非想要脱裤子放屁,可以自己加上滑动操作等等,自行查阅
  5. 其实电脑可以不用24小时开机,通过设置(mac)或者修改bios,或者网卡远程,等等等等一堆办法,有空可以单开一章讲讲
  6. 延伸去想,不只是自动打卡,自动抢红包,游戏自动挂机,抢购商品等等等等,应用很多

最后截张图

最后,有问题或者想交流,请在下方评论,留言,或者直接发邮件


君子慎独,不欺暗室。卑以自牧,含章可贞。