基于pyautogui的Python脚本if-else异常:未检测图片仅执行一次转动
修复持续循环检测的机器人脚本问题
你的脚本只执行一轮就终止的核心原因是没有循环结构持续执行检测与逻辑判断,且原代码存在冗余的条件判断。以下是修复后的完整代码及修改说明:
修复后的代码
import pyautogui import time import keyboard from python_imagesearch import imagesearch donme1 = (-1, 300) donme2 = (300, 300) def donuszamani(): pyautogui.moveTo(donme1) time.sleep(1) pyautogui.moveTo(donme2) time.sleep(1) def sagisin(): time.sleep(2) pyautogui.mouseDown(button='right') time.sleep(1) pyautogui.mouseUp(button='right') time.sleep(1) def solisin(): time.sleep(2) pyautogui.mouseDown(button='left') time.sleep(1) pyautogui.mouseUp(button='left') time.sleep(1) # 无限循环持续检测,按Q键退出 while True: # 每次循环重新检测目标位置,避免只检测一次 pos = imagesearch('tra.png', 0.7) print(f"当前检测位置: {pos}") if pos[0] != -1: # 找到目标图片,执行对应操作 print("找到目标,位置: ", pos[0], pos[1]) pyautogui.moveTo(pos[0]+93, pos[1]+90) time.sleep(0.1) pyautogui.mouseDown() time.sleep(0.1) pyautogui.mouseUp() sagisin() print("操作完成") else: # 未找到目标,执行转动操作 donuszamani() print("未找到目标,执行转动") # 添加退出条件:按下Q键终止循环 if keyboard.is_pressed('q'): print("用户终止脚本") break # 循环间隔,避免检测过于频繁占用资源 time.sleep(0.5)
关键修改点
- 添加无限循环:用
while True包裹核心逻辑,让脚本持续执行检测与操作 - 将检测逻辑移入循环:每次循环都重新调用
imagesearch,确保实时检测目标状态 - 简化条件判断:直接判断
pos[0] != -1即可(imagesearch返回(-1,-1)表示未找到),去掉原代码中冗余的嵌套判断 - 增加退出机制:通过
keyboard.is_pressed('q')实现手动终止,避免脚本无法停止 - 添加循环间隔:
time.sleep(0.5)减少CPU占用,可根据需求调整间隔时长
内容的提问来源于stack exchange,提问作者Servan Karadağ
相关产品推荐
相关产品推荐

