如何遍历完整图片数组后判断是否找到目标图片并执行对应操作
遍历图片数组匹配后执行对应操作的实现方案
问题原因
你原有代码存在两个核心问题:
- 逻辑判断位置错误:将「单张图片不匹配」的判断放在了for循环内部,只要某一张图片没匹配到就会直接触发else分支点击y并终止循环,不会继续检查后续图片
- 变量名不统一:定义的变量是
found,判断时用的是大写的Found,会触发未定义变量报错
解决思路
- 提前定义一个匹配状态标记,初始值设为
False - 遍历所有图片的过程中,只要匹配到任意一张,就修改标记为
True,执行点击x的操作后终止遍历循环即可 - 整个数组遍历完成后,再判断标记状态:如果标记还是
False,说明所有图片都未匹配,此时再执行点击y的操作
最简修正代码(对应你的错误示例)
# 初始化匹配标记 found_match = False for image in image_list: found = pyautogui.locateCenterOnScreen(image) if found is not None: pyautogui.click(x) found_match = True # 已经找到匹配项,无需继续遍历,直接退出for循环 break # 所有图片遍历完成后再判断未匹配的情况 if not found_match: pyautogui.click(y)
优化后完整可运行代码(对应你提供的完整版示例)
import os import pyautogui as py from PIL.ImageOps import grayscale a = 0 aC = 0 image_list = [] # 获取当前目录下所有文件 directory = os.listdir() # 筛选所有png格式的图片加入数组 for file in directory: if file.endswith('.png'): image_list.append(file) while True: if py.locateOnScreen('a.jpg') is not None: breaking_bool = False while not breaking_bool: # 初始化匹配标记 found_match = False # 主匹配循环 for image in image_list: found = py.locateCenterOnScreen(image, grayscale=True, confidence=0.8) if found is not None: # 匹配到对应图片,点指定位置x py.moveTo(1700,1000,0.1) py.sleep(0.01) py.click() py.sleep(1) found_match = True break # 遍历完所有图片后判断未匹配场景 if not found_match: # 所有图片都未匹配,点指定位置y py.moveTo(1415,1000,0.1) py.sleep(0.01) py.click() py.sleep(1) breaking_bool = True aC = aC + 1 a = a + 1
优化说明:新增了
grayscale=True加快匹配速度,confidence=0.8调整匹配精度避免误判,可根据实际需求调整参数值。
内容的提问来源于stack exchange,提问作者user9686961
相关产品推荐
相关产品推荐

