Python while / if условие игнорирования цикла - PullRequest
1 голос
/ 25 июня 2019

Я пишу простой цикл while/if, чтобы прокрутить страницу вниз, когда nextbutton.png не отображается на экране, и прекратить прокрутку, когда кнопка находится на экране.

Должно быть напечатано True, если кнопки нет на экране, и распечатать местоположение кнопки, если она есть. Проблема в том, что когда я запускаю этот код, я получаю следующий вывод:

True
True
True
True
True
True
True
True
True
True
True
True
True
True
False

При написании этого кода он никогда не должен выводить False, либо True, либо местоположение. Я могу предоставить веб-сайту, на котором я пытаюсь это сделать, инструкции по репликации выходных данных, но я подозреваю, что допустил простую логическую ошибку при построении цикла.

import pyautogui
while True:
    if pyautogui.locateOnScreen('nextbutton.png', confidence=0.9) is None:
        print(pyautogui.locateOnScreen('nextbutton.png', confidence=0.9) is None)
        time.sleep(random.randint(0,3000)/1000) 
        pyautogui.press('pagedown')
    else:
        x4, y4 = pyautogui.locateCenterOnScreen('nextbutton.png', confidence=0.9)
        print(x4,y4)
        break

1 Ответ

2 голосов
/ 25 июня 2019

Вы вызываете функцию locateOnScreen() 2 раза, и она может каждый раз возвращать разные выходные данные.

Я предлагаю использовать переменную для хранения вывода locateOnScreen(), чтобы избежать этого состояния гонки.Может быть, это может работать для вас:

import pyautogui

while True:
    v = pyautogui.locateOnScreen('nextbutton.png', confidence=0.9)
    if v is None:
        print(v is None)
    ...
...