接上篇文章python使用uiautomator2操作雷电模拟器9并遇到解决adb 连接emulator-5554 unauthorized问题-CSDN博客
搭建好uiautomator2后,主要就是使用了。
本文就利用uiautomator2的截屏、模拟点击和aircv的找图功能,实现对指定寻找的图片的位置的点击。
环境:python3.8.10,雷电模拟器9
安装库:pip38 install aircv
找图文章参考:
https://blog.51cto.com/u_16213450/9633239
ac.find_template识别图片并定位-CSDN博客
上我的代码:
import aircv as ac
import uiautomator2 as u2
import time
d = u2.connect() # connect to device
print(d.info)
displayWidth = d.info['displayWidth']
displayHeight = d.info['displayHeight']
print(displayWidth,displayHeight)
imsrc = ac.imread('s1.png')#源图,全范围图
imobj = ac.imread('s2.png')#目标图,局部图
pos = ac.find_template(imsrc, imobj)
print(pos)
print(pos['result'][0])#横坐标
print(pos['result'][1])#纵坐标
#找不到的时候,会返回None
#找到的时候,返回{'result': (360.0, 828.5), 'rectangle': ((307, 808), (307, 849), (413, 808), (413, 849)), 'confidence': 0.9999998807907104}
#pos的数据含义为匹配图片在原始图片上的中心坐标点,也就是我们要找的click点,rectangle为矩形坐标(以左上角为坐标原点),confidence是匹配度。
# if float(pos['confidence']) > 0.95:#符合精准度,就是找到了
# print('Have Search')
#使用uiautomator2的click点击找到的图片
#uiautomator2中click输入的是比例(为了适应各种手机屏幕),需要使用 目标点像素的宽 / 屏幕宽,目标点像素高 / 屏幕高
time.sleep(3)
d.click(pos['result'][0]/displayWidth,pos['result'][1]/displayHeight)
上述代码中,s1.png是用uiautomator2的截图命令截取的。
d.screenshot('s1.png')
s2.png为其中的一部分图片(这是要自己设定的),如图:
注意:提取s2.png的时候,一定要使用画图板打开s1.png,然后比例是100%的时候,再裁切得到s2.png,否则会有意想不到的错误(找不到图片,pos返回None)。