解决思路为使用Windows的任务计划程序,定时开启脚本打包好的exe文件,实现定时用电脑打卡
1、脚本编写
主要思路为ctypes库打开安卓模拟器上的企业微信快捷方式,然后使用 pyautogui获取指定位置的像素于设定的像素进行对比判读企业微信是否打开,使用opencv+ pyautogui组合点击工作台,打卡及立即打卡的三个按钮完成打卡,打卡完成后关闭企业微信。
这里使用的是腾讯应用宝模拟器,使用腾讯应用宝的原因有以下
(1)其他模拟器的虚拟定位功能会挂,万一哪天挂了导致打不了卡会亏钱,如果有稳定的虚拟定位功能的模拟器请@我,mumu,夜神都试过了好像是百度地图的服务到期了不让用了。应用宝的定位功能是和电脑定位走的,Windows定位有默认位置的功能(我们无法检测到更精确的位置时,Windows、应用和服务可以使用默认位置)应用宝是获取的基站定位,这个定位会被企业微信判读为不精确的位置,从而企业微信会得到我们设定的默认位置达到定位打卡。
(2)腾讯对自家的软件打开的效率稳定性比较高,现在还没有烦人的广告这点还是不错的
2、脚本编写
脚本程序采用python3.13.2版本注意pyautogui需要管理员权限,调试需要使用管理员打开
import pyautogui
import time
import ctypes
import subprocess
import cv2
import numpy as np
# 定义比较颜色的函数
def compare_color(pixel_color, target_color):
return pixel_color == target_color
# 定义打开快捷方式的函数
def open_shortcut(path):
ctypes.windll.shell32.ShellExecuteW(None, 'open', path, None, None, 1)
def close_program(process_name):
try:
subprocess.run(["taskkill", "/F", "/IM", process_name], check=True)
print(f"{process_name} has been closed.")
except subprocess.CalledProcessError as e:
print(f"Failed to close {process_name}. Error: {e}")
# 定义寻找并点击图像的函数
def find_and_click_image(image_path, confidence=0.9):
# 截取屏幕
screenshot = pyautogui.screenshot()
screenshot = cv2.cvtColor(np.array(screenshot), cv2.COLOR_RGB2BGR)
# 读取目标图像
target = cv2.imread(image_path, cv2.IMREAD_COLOR)
# 匹配图像
result = cv2.matchTemplate(screenshot, target, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
# 如果匹配度大于设定的置信度,则进行点击
if max_val >= confidence:
target_width = target.shape[1]
target_height = target.shape[0]
center_x = max_loc[0] + int(target_width / 2)
center_y = max_loc[1] + int(target_height / 2)
pyautogui.click(center_x, center_y)
return True
return False
def countdown(t):
while t:
mins, secs = divmod(t, 60)
timer = '{:02d}:{:02d}'.format(mins, secs)
print(timer, end="\r") # \r返回行首,实现覆盖当前行
time.sleep(1)
t -= 1
print("定时结束")
# 主循环
while True:
# 第一步:打开企业微信
open_shortcut(r"C:\Users\Desktop\企业微信.lnk"修改一下企业微信的位置)
# 第二步:获取指定位置的像素颜色
countdown(10)
pixel_color = pyautogui.pixel(800, 110)
# 第三步:比较颜色
if compare_color(pixel_color, (57, 117, 198)):
# 第四步:屏幕截图寻找""的位置并点击他
if find_and_click_image(r"C:\Users\工作台图片的位置):
countdown(2)
# 第五步:屏幕截图寻找""的位置并点击他
if find_and_click_image(r"C:\Users\打卡图片的位置"):
countdown(6)
# 第六步:点上一个位置相对位置(用微信的截图算一下打卡的坐标和确定打卡位置的坐标相对位置)
pyautogui.moveRel(x, y)
pyautogui.click()
countdown(2)
close_program("Androws.exe")
print("颜色匹配,关闭企业微信")
break
else:
print("未找到图像2,重新执行")
continue
else:
print("未找到图像1,重新执行")
continue
else:
# 如果颜色不匹配,重新执行循环
print("颜色不匹配,重新执行")
countdown(5) # 等待一段时间再重新执行
调试完成后打包脚本,先安装pyinstall包终端输入pyinstaller 脚本名.py得到 exe文件
4、定时任务设置
建议做一个定时关机和定时开机配合使用,定时开机可以用主板自带的设置,定时关机可以用任务计划里面的定时关机自行哔哩哔哩,开机免密码使用修改注册表实现自行哔哩哔哩