采用uiautomator2库编写自动打卡
这只是一个半自动的定时打卡机打卡机,并不能完全解放双手,依赖电脑环境连接adb。需要解放双手的可以打住了。只为学习。可以继续接着看。如果要解放双手可以用java写成android应用 采用定时器和电话通知方式打卡。并且微信截图上报通知结果。会更加方便。
pip install pyinstaller 打包exe
安装watchdog命令 pip install watchdog 看门狗
看门狗进程守护 python实现的看门狗程序
'''# 安装
pip install --upgrade weditor
# 安装移动端(上面安装过了这里就可以跳过)
python -m uiautomator2 init
# 启动
python -m weditor
'''
# coding: utf-8
import json
import os
import sys
import uiautomator2 as u2
import time
import schedule
PassWord = ""
Account = ""
PackageName = 'com.alibaba.android.rimet'
'''
# 安装
pip install --upgrade weditor
# 安装移动端(上面安装过了这里就可以跳过)
python -m uiautomator2 init
# 启动
python -m weditor
'''
def Log(txt):
#pass
print(txt)
def Log(txt):
#pass
print(txt)
def autoDaKa():
App = u2.connect()
screen = App.info
if screen["screenOn"] == False:
Log('当前黑屏')
App.screen_on()
Log('点亮屏幕')
time.sleep(3)
Log('解锁')
App.swipe_points([(0.485, 0.708), (0.481, 0.286)], 0.05) # 滑动解锁界
time.sleep(2)
App.app_stop(PackageName)
Log('启动钉钉')
App.app_start(PackageName)
time.sleep(2)
#检查当前activity
isExits = App(resourceId="com.alibaba.android.rimet:id/ll_pwd_login_mode").exists
if isExits:
Log('开始登陆')
#执行钉钉登陆
App.set_fastinput_ime(True)
App(resourceId="com.alibaba.android.rimet:id/et_phone_input").set_text(Account)
time.sleep(1)
App(resourceId="com.alibaba.android.rimet:id/et_pwd_login").set_text(PassWord)
App.set_fastinput_ime(False)
App.press("back")
App(resourceId="com.alibaba.android.rimet:id/tv").click()
time.sleep(3)
else:
Log('已经登陆')
#等待主界面10秒
App.wait_activity(".LaunchHomeActivity", timeout=2) # default timeout 10.0 seconds
Log("打开工作台")
App(resourceId="com.alibaba.android.rimet:id/home_bottom_tab_button_work").click()
time.sleep(1)
Log("打开考勤")
App.xpath('//*[@text="考勤打卡"]').click()
time.sleep(2)
#判断时间 是上午还是下午
# 范围时间
start_time = datetime.datetime.strptime(str(datetime.datetime.now().date()) + '8:00', '%Y-%m-%d%H:%M')
# 开始时间
end_time = datetime.datetime.strptime(str(datetime.datetime.now().date()) + '10:00', '%Y-%m-%d%H:%M')
now_time = datetime.datetime.now()
if start_time < now_time < end_time:
Log('上班打卡')
App.xpath('//*[@text="上班打卡"]').click()
else:
Log('下班班打卡')
App.xpath('//*[@text="下班打卡"]').click()
time.sleep(2)
Log("打开完毕")
#关闭钉钉
App.app_stop(PackageName)
#手机关屏
App.screen_of();
if __name__ == "__main__":
schedule.every().day.at("09:40").do(autoDaKa)
schedule.every().day.at("20:01").do(autoDaKa)
while True:
schedule.run_pending()
time.sleep(1)