前言
本文将展示一个自动化企业微信打卡脚本。
说明:实在是不想每天一早进行企业微信打开,一咬牙一跺脚,通过模拟器和python编写了一个在电脑上可以定时、多天的自动打卡脚本。
简介
事先声明:本文章代码仅做为学习使用,如果使用文章提供的代码进行的一切行为所造成的后果由使用者个人承担
通过python并结合模拟器写了一个脚本用于企业微信的定时自动打开。实现方式简单来说就是在通过识别到企业微信上立即打卡和上班打卡的字,python程序通过鼠标按顺序对两个字进行双击操作,实现自动打卡。
实现方式
引入pyautogui库,这个库可以识别电脑屏幕最上层的图片,并控制鼠标进行单击、双击、右击,控制键盘进行输入等操作。程序采用了pyautogui库的识别和双击,confidence参数控制图像的识别精度。
引入datetime库,这个库可以获取时间(年月日时分秒)。程序通过让用户输入时间的方式让用户自定义打卡时间,并通过要求设置时间的方式,对参数day进行累加实现多天的打卡。
由于是模拟器打卡所以,企业微信会每天自动出现xx:xx上班打卡 未满足自动打卡条件,请手动打卡 关闭 立即打卡这样一个提示框,所以就利用这点截取立即打卡这部分的图片,导入截图通过pyautogui库实现点击操作,完成后会有上班打卡的提示框,同理,通过设置循环读取截图后识别并点击的操作即可实现自动打卡。
很简单的实现,按照这种实现方式也可以编写用于其他地方的脚本,自由发挥吧。
使用说明
模拟器使用说明
安装模拟器(此处采用ldplayer9进行说明,其它模拟器也一样,非指定!!)
安装完模拟器后安装企业微信,如果应用商店没有就通过apk安装(安装按钮在最右侧倒数第三个)
同时打开定位(安装按钮在最右侧倒数第一个更多中点进去第二个按钮)
程序使用说明
需要安装对应的库,pyautogui,datetime。
1 2
| pip install pyautogui pip install python-time
|
为了使用方便也可以封装成.exe文件
注:需要程序运行时需要保持企业微信窗口处于主屏幕最上层,不然识别不了
代码
代码写的并不完美肯定有更简单的实现方法,而且程序对输入也没有做限制和修正,只能说能用哈哈哈。
再次声明:本文章代码仅做为学习使用,如果使用文章提供的代码进行的一切行为所造成的后果由使用者个人承担
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
| import pyautogui import time from datetime import datetime, timedelta
import os
def find_image_and_double_click(image_path, confidence=0.9): while True: try: location = pyautogui.locateOnScreen(image_path, confidence=confidence) if location: x, y = pyautogui.center(location) pyautogui.doubleClick(x, y) break else: print("未找到指定图像,正在重新检测...") time.sleep(1) except pyautogui.ImageNotFoundException: print("未找到指定图像,正在重新检测...") time.sleep(1)
def execute_at(target_time, image_path): current_time = datetime.now() time_difference = target_time - current_time
if time_difference.total_seconds() > 0: time.sleep(time_difference.total_seconds())
time.sleep(1) daka(image_path)
def daka(image_paths): print("程序开始运行")
image_paths = image_paths index = 0
while index < len(image_paths): image_path = image_paths[index] find_image_and_double_click(image_path) time.sleep(1) print("第" + str(index + 1) + "步" + "执行成功") index += 1
print("程序运行结束") print(1)
def mainWork(image_paths): image_paths = image_paths while (1): print("请按照以下提示进行时间输入")
year = input('请输入年份(如2023):') year = int(year) month = input('请输入月份(如12):') month = int(month) day = input('请输入日期(如6):') day = int(day) hour = input('请输入小时(如8):') hour = int(hour) minute = input('请输入分钟(如20):') minute = int(minute)
target_time = datetime(year=year, month=month, day=day, hour=hour, minute=minute)
number_day = input('请输入天数(如10):') number_day = int(number_day)
print("输入的时间是:", target_time) print("程序将打卡" + str(number_day) + "天")
days = 0
for i in range(number_day): print("等待中......") print("目标时间是:", target_time) execute_at(target_time, image_paths)
target_time += timedelta(days=1) days += 1
index = 0
if __name__ == "__main__": print("自动打卡程序启动")
image_paths = ["lijidaka.png", "shangbandaka.png"]
mainWork(image_paths)
os.system('pause')
|