赞
踩
昨天写过一篇文章
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。