用树莓派来实现钉钉打卡

来自 yoyolife 的投稿。

可以钉钉打卡的途径很多,我没研究过。公司是用wifi连接打卡的。所以我自己做了一个。懒得去研究其他方法,也不想花钱。

刚好有闲置的树莓派,和一台闲置的安卓手机。

我只要用 adb 调起钉钉,钉钉就会自动打卡了。那么就开干吧。

安装 adb

sudo apt-get update sudo apt-get install -y android-tools-adb android-tools-fastboot

把手机设为不用密码

然后运行下面基础代码

import time import threading import os,subprocess import base64 import random PATH = lambda p: os.path.abspath(p) isScreenshoting = False #打卡 def onWork(): # 开个线程截图 ts = threading.Thread(target=runLoopScreenshot, args=()) ts.setDaemon(True) global isScreenshoting isScreenshoting = True ts.start() os.system(‘adb shell input keyevent 26’) os.system(‘adb shell input keyevent 3’) os.system(‘adb shell am start -n com.alibaba.android.rimet/com.alibaba.android.rimet.biz.SplashActivity’) # 等15秒后关闭 time.sleep(15) os.system(‘adb shell input keyevent 3’) os.system(‘adb shell input keyevent 6’) isScreenshoting = False # 打卡完毕 tend = threading.Thread(target=enddk, args=()) tend.start() def enddk(): # 通知你想通知的地方 print(“end”) time.sleep(10) def runLoopScreenshot(): global isScreenshoting while isScreenshoting: # os.popen(“adb wait-for-device”) s = os.popen(“adb shell screencap -p | base64”).read() print(s) os.popen(“adb shell screencap -p /data/local/tmp/tmp.png”) path = ‘/home/pi’ os.popen(“adb pull /data/local/tmp/tmp.png ” + PATH(path + “/s.png”)) # os.popen(“adb shell rm /data/local/tmp/tmp.png”) # 图片转了base64 可以发到你想发的地方 with open(path + “/s.png”, “rb”) as f: base64_data = base64.b64encode(f.read()) print(‘success’) if __name__ == ‘__main__’: # 设置多几个打卡时间 dakaTime = [’08:49:40′, ’08:47:32′, ’08:53:25′] nextDakaTime = None while True: try: # 看有没有设备连接 device = os.popen(‘adb devices -l’).read() out = device.split(‘ ‘) print(‘{“action”:”device”,”data”:”%s,%s,%s”}’ % (out[11], out[12], out[13])) currentTime = time.strftime(“%H:%M:%S”, time.localtime()) if nextDakaTime == None: r = random.randint(0, len(dakaTime) – 1) nextDakaTime = dakaTime[r] print(currentTime,nextDakaTime) if currentTime == nextDakaTime: # 开个线程打卡 t = threading.Thread(target=onWork, args=()) t.setDaemon(True) t.start() except Exception as e: print(“something wrong:”, e) time.sleep(1)

上面的代码我修改了但没测试过

因为我之前是通过mqtt发到我的手机上

现在我把mqtt去了。自行修改代码发到邮件通知也行,用 wxpy 发到微信也行。

新年要到了,最后祝大家以后迟到不用扣钱。

来自 yoyolife 的投稿,出处:http://www.yoyolife.fun:9000/blog/post/5e0f00a29b8672003000015d