python 图片对比 点击PC端任意一点

在开发自动化脚本的时候,很多时候有这种需求,需要点击PC端的软件,来进行测试,比如:打开串口工具、测速软件等等,这个时候就需要你去开发相关的代码了,在我的工作经验中,我一般采取俩种实现方式:
1.基于autoit去点击PC端控件信息,直接获取到控件信息的类名以及次序直接传入原生接口即可;
2.不过,有时候经常第一种方式拿不到控件信息,这个时候就只能采用图片识别获取坐标的方式去点击了;
下面我就把第二种代码贴出来,供大家参考,如有不足,欢迎指出,共同进步:

# -*- coding:utf-8 -*-

from PIL import image
import aircv as ac
import win32gui,win32ui,win32con,win32api

class Screen():

	def __int__(self):
		pass
	#判断坐标点的rgb值
	def find_pic_rgb(self,file_path,x,y,r,g,b):
		im=Image.open(file_path)
		pix=im.load()
		result=pix[x,y]
		if result[0]==r and result[1]==g and result[2]==b:
			return True
		else:
			return False
			
	#比较俩张图片,如果比较成功,返回比较图片的x,y坐标,比较失败返回0
	#参数:要点击的图片,被比较的图片,相似度(如果你用此接口建议相似度调高点,点击的更精确哦)
	def compare_image(self,image_path_2,image_path_1,num=0.6):
		imsrc=ac.imread(image_path_1)
		imobj=ac.imread(image_path_2)
		#拿到path_2的坐标位置
		pos=ac.find_template(imsrc,imobj,num)
		if pos==None:
			return 0
		else:
			return pos['result']

	#裁剪图片
	def cut_image(self,image_path,x1,x2,y1,y2):
		img=cv2.imread(image_path)
		cropped=img[y1:y2,x1:x2]
		#裁剪坐标为[x0:x1,y0:y1]
		cv2.imwrite(image_path,cropped)

	#截取当前屏幕的图片
	def cut_screen(self):
		hwnd=0
		hwndDC=win32gui.GetWindowDC(hwnd)
		mfcDC=win32gui.CreateDCFromHandle(hwndDC)
		saveDC=mfcDC.CreateCompatibleDC()
		saveBitMap=win32ui.CreateBitmap()
		MoniterDev=win32api.EnumDisplayMonitors(None,None)
		w=MoniterDev[0][2][2]
		h=MoniterDev[0][2][3]
		saveBitMap.CreateCompatibleBitmap(mfcDC,w,h)
		saveDC.SelectObject(saveBitMap)
		saveDC.BitBlt((0,0),(w,h),mfcDC,(0,0),win32con.SRCCOPY)
		saveBitMap.SaveBitmapFile(saveDC,"你的路径")

if __name__=='__main__':
	s=Screen()
	import autoit
	s.cut_screen()
	#路径2是cut_screen方法截图图片的放置路径
	#路径1:一定要在路径2截图上再去截图你想点击的图(分辨率一致)
	res=s.compare_image("路径1","路径2",num=0.95)	
	autoit.mouse_click("left",res[0],res[1])

好了,就这些了,不要太感谢我哦!加油,共同进步!

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值