钉钉自动打卡并微信通知打卡成功

关于自动打卡

因为公司经常性的加班,然后第二天上班会迟到,想着使用一台手机放在公司,然后每天自动打上班卡,并且使用微信进行通知我是否打卡成功。

逻辑设计

1、运行脚本
2、对比当前时间与设置的打卡时间
3、符合条件开始打卡并发送微信信息

自动打卡脚本

关于自动打卡的脚本我在之前的博客有写到,此处不多讨论。

微信通知

使用的库:

使用的是wxpywxpy官方介绍如下:

控制路由器、智能家居等具有开放接口的玩意儿
运行脚本时自动把日志发送到你的微信
加群主为好友,自动拉进群中
跨号或跨群转发消息
自动陪人聊天
逗人玩

总而言之,可用来实现各种微信个人号的自动化操作

通过获取微信机器人对象来进行相关操作

	b = Bot(console_qr=0,cache_path="..\wxpy.pkl")

b 就是机器人对象,实质上等同于一个微信客户端。
cache是是否保存登录信息,如果脚本多次调试的话,就不需要每次都扫码登录微信。
通过搜索好友昵称获得好友列表(list)

	my_friends = b.friends().search('小王')

对好友列表中的好友发送信息:

	my_friends[0].send('hello world')
自动打卡

因为钉钉上班卡一般是快捷打卡,每天早上只需要启动钉钉就会自动自动打卡,逻辑实现很简单,只需要启动APP就行。

上班卡不需要操作控件,因此只用adb命令进行APP启动也是可以的。但是若是还需要打下班卡就需要定位元素进行打卡,因此adb不行,在此采用的是uiautomator2库,之前的博文有提到过,这里不过分说明。

源码:

# -*- coding: utf-8 -*-
# @Time    : 19-3-4 下午4:22
# @Author  : Merlin
# @Email   : [email protected]
# @File    : w_bot.py
# @Software: PyCharm

import time
from wxpy import *
import threading
import uiautomatro2 as u2

# 启动微信机器人
b = Bot(console_qr=0,cache_path="..\wxpy.pkl")
my_friend = b.friends().search('小王')[0]	#这里搜索到的是一个list所以需要取第一个

serialno = 'temp_serialno' # Android设备的adb devices号
apk = 'com.alibaba.android.rimet' #钉钉包名

def shangban():
	try:
		d = u2.connect_usb(serialno) #连接设备
		time.sleep(5)
		d.app_stop(apk) #先停止APP,不然的话再启动APP不会触发钉钉自动快捷上班卡。
		d.app_start(apk)
		time.sleep(10)
		my_friend.send('打卡成功!')
		d.app_stop(apk)
	except Exception as e:
		raise e
def xiaban():
	'''
	下班卡需要元素定位,钉钉是混合应用,最好针对不同设备分辨率采用不同的坐标定位
	
	d(resourceId="com.alibaba.android.rimet:id/home_bottom_tab_icon", className="android.widget.ImageView", instance=1).click()
	这是元素定位到的情况
	
	d.drag(0.5,0.7,0.5,0.1,0.5)
	这是依据坐标滑动
	
	d.click(0.135, 0.65)
	这是依据坐标进行点击
	
	具体可见我之前博文提到的方法
	'''
	pass

# 拿到当前时间并格式化
def get_time():
	nowtime = (time.strftime('%H%M', time.localtime(time.time())))
	return str(nowtime)

if __name__ == "__main__":
# 当前时间与预设置时间进行对比,若相同则开始打卡

# 如果想一直保持脚本的运行,可以把两个break删除,然后就会全天循环检测
	while 1:
		if get_time() == '0850': #这就是预设置的时间08:45,依据实际更改
			shangban()
			break
		if get_time() == '1830': #这就是预设置的时间18:30,依据实际更改
			xiaban()
			break
		time.sleep(40)

你可能感兴趣的:(提升自己)