昨天写过一篇文章
python使用uiautomator2操作雷电模拟器9找图(一)-CSDN博客
今天在实际中有遇到了新的问题:一幅主图中,可能存在多个相同的子图,想要找到所有的子图,并操作。比如:
主图:
子图(在主图中有两个):
上代码,主要就是用find_all_template代替了find_template。
可参考:滑动验证页面
import aircv as ac
import uiautomator2 as u2
d = u2.connect() # connect to device
print(d.info)
displayWidth = d.info['displayWidth']
displayHeight = d.info['displayHeight']
print(displayWidth,displayHeight)
d.screenshot('主图.png')
time.sleep(3)
imsrc = ac.imread('主图.png')
imobj = ac.imread('子图.png')
# pos = ac.find_template(imsrc, imobj)
pos_list=ac.find_all_template(imsrc, imobj)#可以找到所有符合条件的子图,结果是个列表
print(pos_list)
#[{'result': (89.0, 1072.0), 'rectangle': ((27, 1045), (27, 1099), (151, 1045), (151, 1099)), 'confidence': 0.9999960660934448}, {'result': (89.0, 652.0), 'rectangle': ((27, 625), (27, 679), (151, 625), (151, 679)), 'confidence': 0.9972855448722839}]
for one in pos_list:
if float(one['confidence']) > 0.95:
d.click(one['result'][0]/displayWidth,one['result'][1]/displayHeight)
实际中还有情况,比如这些子图在一屏中显示不全,需要上划手机屏幕,不断的出现,这时上面的代码就要结合uiautomator2的操作。
d.swipe_ext('up',0.5)#模拟使用手指由下向上滑动手机页面
其中,0.5为指定方向滑动百分之多少,为float型数据,数据范围是:0.01 到 0.999。
可参考:(1)https://www.cnblogs.com/xiondun/p/17896525.html(2)https://www.cnblogs.com/renjie1105/p/13472356.html
使用一个while循环,将上述两段代码结合起来,直到符合某种条件,break退出循环,就可以了。有时根据情况,还需要两层while循环,一定要注意逻辑以及循环的退出,参考文章:https://www.cnblogs.com/hd92/p/14598250.html