钉钉自动打卡

钉钉自动打卡+进程守护

 

采用uiautomator2库编写自动打卡

这只是一个半自动的定时打卡机打卡机,并不能完全解放双手,依赖电脑环境连接adb。需要解放双手的可以打住了。只为学习。可以继续接着看。如果要解放双手可以用java写成android应用 采用定时器和电话通知方式打卡。并且微信截图上报通知结果。会更加方便。

 

依赖以下环境

  1. android手机一台 能adb调试的 
  2. python3环境
  3. pip install pyinstaller   打包exe

  4. 安装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)

 

你可能感兴趣的:(Python)