Приведенный ниже код должен искать первое изображение и в случае, если он его не находит, выполнять поиск других изображений и кликать по ним.
проблема заключается в том, что после того, как он не находит его в первый раз и прокликивает все найденные изображения он перестает выполнять код. его не сильно заботит то, что он в цикле и выйти из него он тоже не хочет.
Сам код исполняется весь, но в конце пишет 'imgs f done' и после этого он продолжает принтить его же, только уже ничего не делает. это лучше чем то, что было раньше, но я теперь в принципе не понимаю, где он потерялся...
Пример кода:
import pyautogui as pg
import time as t
import cv2
import numpy as np
mmcfs = 0
while mmcfs > 1:
try:
#first.png это то, что надо найти.
gb8 = pg.locateOnScreen('first.png', region=(0, 0, 450, 970), confidence=0.8)
pg.moveTo(gb8)
t.sleep(0.3)
pg.moveTo(1, 1)
print('gb8nmc')
y += 2
mmcfs += 1
t.sleep(1)
except:
# а приведенный ниже цикл должен был выполняться каждый раз, когда first.png был не найден
while True:
try:
image_path1 = '1.png'
image_path2 = '2.png'
image_path3 = '3.png'
image_path4 = '4.png'
image_path5 = '5.png'
clicks = 2
threshold = 0.7
image1 = cv2.imread(image_path1, cv2.IMREAD_GRAYSCALE)
image2 = cv2.imread(image_path2, cv2.IMREAD_GRAYSCALE)
image3 = cv2.imread(image_path3, cv2.IMREAD_GRAYSCALE)
image4 = cv2.imread(image_path4, cv2.IMREAD_GRAYSCALE)
image5 = cv2.imread(image_path5, cv2.IMREAD_GRAYSCALE)
screenshot = pg.screenshot(region=(0, 0, 450, 970))
screenshot = np.array(screenshot)
screenshot = cv2.cvtColor(screenshot, cv2.COLOR_RGB2BGR)
gray_screenshot = cv2.cvtColor(screenshot, cv2.COLOR_BGR2GRAY)
images = [image1, image2, image3]
for image in images:
result = cv2.matchTemplate(gray_screenshot, image, cv2.TM_CCOEFF_NORMED)
locations = np.where(result >= threshold)
image_center = (image.shape[1] // 2, image.shape[0] // 2)
for pt in zip(*locations[::-1]):
center_x = pt[0] + image_center[0]
center_y = pt[1] + image_center[1]
pg.click(x=center_x, y=center_y, clicks=clicks)
t.sleep(3)
print('imgs f done')
break
except:
print('imgs f failed')
t.sleep(1)