Pyautogui проверка картинки в цикле

Есть задача, у меня есть картинка, она появляется в определенный момент, то есть изначально её нет.
Решил через цикл постоянно искать эту картинку.

Написал такой код:

import pyautogui
import time

while pyautogui.locateCenterOnScreen(r'D:\Bot.py\pythonProject2\screen\image.png', confidence=0.5) is not None:

    print("None")
    time.sleep(5)

a = pyautogui.locateCenterOnScreen(r"D:\Bot.py\pythonProject2\screen\image.png")

print(a)

pyautogui.moveTo(a)

pyautogui.click()

При запуске кода получаю:

прикол

Что делать как быть?

P.S. Ругается что картинка не найдена, но в этом и весь прикол, если картинка не найдена, код запускается заново, если найдено - выполняет тело кода.


Ответы (1 шт):

Автор решения: Amgarak

Документация pyautogui

Note: You need to have OpenCV installed for the confidence keyword to work.

Перевод, кратко: Вам необходимо установить OpenCV. pip install opencv-python

import pyautogui
location = pyautogui.locateOnScreen('image.png')
# location возвращает кортеж (left=1416, top=562, width=50, height=41)
point = pyautogui.center(location)
# point получаем центр картинки которую нашли(координаты)

x, y = point
pyautogui.click(x, y)  # щелкает по центру того места, где была найдена картинка
pyautogui.click('image.png') # сокращенная версия для нажатия в центре того места, где была найдена картинка

If the image can’t be found on the screen, locateOnScreen() raises ImageNotFoundException.

Если изображение не удается найти на экране, метод locateOnScreen() вызывает исключение ImageNotFoundException. И если вы ищите картинку в цикле, вам нужно обрабатывать это исключение.

confidence=0.5 как по мне маловато будет. Лучше устанавливать значение от 0.8

По итогу я бы сделал что-то такое:

import pyautogui
from pyautogui import ImageNotFoundException
import time

while True:
    try:
        location = pyautogui.locateOnScreen('image.png', confidence=0.85)

        point = pyautogui.center(location)
        x, y = point
        pyautogui.click(x, y)
        break  # Выход из цикла после успешного клика
        
    except ImageNotFoundException:
        print("Изображение не найдено. Повторная попытка через секунду...")
        time.sleep(1)  # Пауза перед повторной попыткой
→ Ссылка