Pyautogui编写游戏自动化脚本时elif分支不生效问题求助
Pyautogui自动化脚本elif分支不生效问题解决方案
核心问题原因
- 判断逻辑不符合函数返回规则
pyautogui.locateOnScreen()仅会返回两种结果:识别到目标图片时返回坐标元组,未识别到返回None,原代码中elif分支写的!= False逻辑完全错误:None和False并不相等,无论是否识别到skip.png,该判断都会出现逻辑偏差,应该和if分支保持一致使用!= None做判断。 - 内层死循环阻塞外层执行
第一个if分支内部嵌套了一个没有退出条件的while True循环,只要第一次触发了playable.png的识别逻辑,代码就会永远卡在内层循环中反复判断ok.png,永远不会回到外层循环执行elif分支的判断,这是elif分支完全不触发的核心原因。 - 路径格式错误
skip.png的路径混用了正斜杠和反斜杠C:/Users\E7440/,部分系统下会出现路径识别失败,无法正常读取图片的问题。
修复方案
- 修正elif分支的判断逻辑,将
pyautogui.locateOnScreen('xxx/skip.png',confidence = 0.6) != False改为pyautogui.locateOnScreen('xxx/skip.png',confidence = 0.6) != None - 给内层while循环增加break退出条件,完成ok.png对应的操作后直接跳出内层循环,回到外层主循环继续执行其他判断
- 统一所有文件路径的斜杠格式,全部使用正斜杠或者双反斜杠,避免路径读取失败
- 可选在每个判断分支增加打印日志,方便后续排查识别结果
修复后参考代码
import pyautogui,time pyautogui.click(610,753) while True: time.sleep(1) if pyautogui.locateOnScreen('C:/Users/E7440/Desktop/playable.png',confidence = 0.6) != None: pyautogui.click(626,307) time.sleep(3) pyautogui.click(713,610) time.sleep(1) pyautogui.click(729,648) time.sleep(5) pyautogui.click(580,447) time.sleep(0.5) pyautogui.click(665,444) time.sleep(0.5) pyautogui.click(750,445) time.sleep(0.5) pyautogui.click(662,695) time.sleep(60) # 内层循环增加break退出逻辑 while True: if pyautogui.locateOnScreen('C:/Users/E7440/Desktop/Class 7/Science/ok.png',confidence = 0.6) != None: pyautogui.click(632,690) time.sleep(4) pyautogui.click(819,690) time.sleep(1) pyautogui.click(753,690) time.sleep(6) # 操作完成后跳出内层循环,回到外层主循环 break elif pyautogui.locateOnScreen('C:/Users/E7440/Desktop/skip.png',confidence = 0.6) != None: pyautogui.click(626,307) print("Found the right one") time.sleep(10) pyautogui.click(795,52) time.sleep(5)
原提问者已验证,调整判断逻辑和内层循环后问题已修复。
内容的提问来源于stack exchange,提问作者PROGRAMMER
相关产品推荐
相关产品推荐

