You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyAutoGUI.locateOnScreen在Linux下行为异常:循环查找失效求助

解决Pop OS 22.04下PyAutoGUI循环查找屏幕元素抛出异常的问题

问题根源

PyAutoGUI在不同操作系统下的默认行为存在差异:Windows环境中locateOnScreen找不到目标时会返回None,但Linux(如Pop OS 22.04)环境下,它会直接抛出ImageNotFoundException,导致你的循环提前终止,无法持续查找目标元素。

修复方案

你可以通过两种方式让函数在Linux下持续循环查找:

方案1:捕获ImageNotFoundException异常

修改函数,在每次调用locateOnScreen时捕获异常,找不到目标时重置loc为None并继续循环:

import pyautogui

def __clicks_print(area, *print_names, nclicks=1):
    loc = None
    while not loc:
        for print_name in print_names:
            try:
                loc = pyautogui.locateOnScreen(print_name, region=area)
                print(loc)
                if loc:
                    break
            except pyautogui.ImageNotFoundException:
                loc = None
                continue
    pyautogui.moveTo(loc)
    pyautogui.click(clicks=nclicks)

方案2:设置raiseException=False参数

如果你的PyAutoGUI版本支持,可以直接在locateOnScreen中添加raiseException=False参数,让找不到目标时返回None而非抛出异常:

import pyautogui

def __clicks_print(area, *print_names, nclicks=1):
    loc = None
    while not loc:
        for print_name in print_names:
            loc = pyautogui.locateOnScreen(print_name, region=area, raiseException=False)
            print(loc)
            if loc:
                break
    pyautogui.moveTo(loc)
    pyautogui.click(clicks=nclicks)

优化建议

为避免循环占用过高CPU,可在每次循环后添加短暂延迟:

import pyautogui
import time

def __clicks_print(area, *print_names, nclicks=1):
    loc = None
    while not loc:
        for print_name in print_names:
            try:
                loc = pyautogui.locateOnScreen(print_name, region=area)
                print(loc)
                if loc:
                    break
            except pyautogui.ImageNotFoundException:
                loc = None
                continue
        time.sleep(0.5)  # 每次循环暂停0.5秒
    pyautogui.moveTo(loc)
    pyautogui.click(clicks=nclicks)

内容的提问来源于stack exchange,提问作者Milton Ventura

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 16:22:50