基本不会python语法,只是读了几篇别人的博客写出玩的,所以很是粗糙,做的也比较麻烦,数据转换来转换去的,而且excel表部分地方也不能把汉字写上去,判断图标是否匹配也比较潦草,如果有优化意见,欢迎指正
实现原理:
先通过cv2库函数取出图像,再使用cv2.matchTemplate函数进行图像匹配,求出你需要点击图像所在电脑的坐标,然后通过pyautogui库实现鼠标的移动和点击,再用pyperclip库实现文字的复制和粘贴
前提:
安装相应的库
pip install pyperclip 回车
pip install xlrd==1.2.0 回车
pip install pyautogui==0.9.50 回车
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple 回车
具体过程:
在项目建立文件image用来存放图片,再建立xlfile文件存放excel文件(这里主要是为了学习使用,如果觉得麻烦可以看看我的另一篇博客,另一篇没有使用xlrd库,是自动点开B站的,基本原理一样http://t.csdn.cn/g2EPw)
这里的a1放的微信图标,a2接收人的微信头像,a6是退出微信聊天界面点的×的图片,a3,a4,a5不用管,这几个图片并没有使用
xlsx文件用的ww,文件内容如下
分别是图片的名称,运行之后在控制台的提示,点击次数,间隔时间,点击方式
解释一下,为啥表头写了两个1,而不是文字,因为这两列在后面转换成了int和float型数据,如果写文字会显示无法转换,同样也不能空着,这也是为什么明明a4没有图片,无点击等操作后面还是写了数据的原因
import cv2
import pyautogui
import pyperclip
#https://blog.youkuaiyun.com/qq_42791845/article/details/103700503 匹配方式
import xlrd
#点击坐标,方式,次数,提示,间隔时间
def click(x,y,meth,second,tip,time):
pyautogui.moveTo(x,y)
print(tip)
pyautogui.click(button=meth,clicks=second)
pyautogui.sleep(time)
#输入要找的图片路径输出位置
def get_xy(img_model_path):
pyautogui.screenshot().save("./image/screenshot.png")
img_model=cv2.imread(img_model_path)
img_desk =cv2.imread("./image/screenshot.png")
#匹配图片嘻嘻
result=cv2.matchTemplate(img_desk,img_model,cv2.TM_SQDIFF_NORMED)
#print(cv2.minMaxLoc(result)[2])
#计算位置嘻嘻
upper_left=cv2.minMaxLoc(result)[2]
height,width,chanel=img_model.shape
postion=((upper_left[0]+width/2),(upper_left[1]+height/2))
return postion
def out():
w = xlrd.open_workbook('./xlfile/ww.xlsx')
bibi = w.sheet_by_index(0)
col=bibi.cell_value(3,4)
pyperclip.copy(col)
pyautogui.hotkey('ctrl','v')
pyautogui.sleep(0.3)
pyautogui.press("enter")
def xl():
w=xlrd.open_workbook('./xlfile/ww.xlsx')
bibi=w.sheet_by_index(0)
row=bibi.nrows
#row行 col列
col_picNumber_value=bibi.col_values(0)
col_tips_value = bibi.col_values(1)
col_ckNumber_value = bibi.col_values(2)
col_times_value = bibi.col_values(3)
col_meths_value = bibi.col_values(4)
#将数据转换成str int float
col_picNumber_value=[str(i) for i in col_picNumber_value]
col_tips_value = [str(i) for i in col_tips_value]
col_ckNumber_value = [int(i) for i in col_ckNumber_value]
col_times_value = [float(i) for i in col_times_value]
col_meths_value = [str(i) for i in col_meths_value]
for x in range(1,row-1):
if x==3:
out()
continue
postion = get_xy("./image/%s.png" % (col_picNumber_value[x]))
if postion[0] >= 1500:
pyautogui.alert('%s匹配失败' % (col_tips_value[x]))
exit(0)
else:
click(postion[0], postion[1], col_meths_value[x], col_ckNumber_value[x], col_tips_value[x], col_times_value[x])
count = 0
while (count<3):
count=count+1
out()
xl()
小问题:
(1)程序运行提示匹配不到,可能是电脑目前看不到微信图标,因为每次匹配是先对电脑进行截图,通过截图进行匹配,可以看看image文件的screenshot.png图片
(2)发现xlrd库不支持xlsx文件,那可能是xlrd库版本高了,换个版本即可