前言

可以钉钉打卡的途径很多,我没研究过。公司是用 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)</code></pre><h2>最后</h2><p>将手机设置成无密码,就可以自动打卡了,最后祝大家以后迟到不用扣钱。</p><p>转自 MoLeft's Blog</p>
分类: 经验教程 标签: 暂无标签

评论

暂无评论数据

暂无评论数据

目录