Ошибка разрешения щелчка PyAutoGui

У меня очень странная проблема, которую я раньше не видел в python.

У меня есть скрипт, который безупречно работает на одном компьютере, и когда я пытаюсь использовать его на другом, моя определенная функция дает сбой.

Я использую PyAutoGUI для автоматизации некоторых процессов.

import csv
import pyautogui

pyautogui.PAUSE = 0.50
pyautogui.FAILSAFE = True


#click function requires arguments ('fullPathToImage', "Error Identifier")
def click(fullPathToImage, error):
    try:
        pyautogui.click(pyautogui.center(pyautogui.locateOnScreen(fullPathToImage)))
    except:
        print(error, " not found, trying again")
        click(fullPathToImage, error)

def start():
    click('C:/projects/images/test.png', "test.png")
    pyautogui.typewrite("This is my test text")

if __name__ == '__main__':
    start()

Что происходит на этой другой машине, так это то, что когда она находит изображение, она перемещает мышь и щелкает, как и ожидалось в операторе try, но затем также немедленно выполняет оператор кроме.

Единственная разница между нашими двумя машинами в том, что я использую подушку 3.1.1, а та, на которой она не работает, — это подушка 3.3.0.

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

По общему признанию, я довольно новичок в отлове ошибок, и я не уверен, с чего продолжать дальше. Любая помощь будет принята с благодарностью.

edit: причина вызова функции щелчка в исключении состоит в том, чтобы исключить операторы ожидания во время загрузки экранов. в зависимости от количества обрабатываемых данных трудно запрограммировать задержки.


person Mark Halls    schedule 20.07.2016    source источник


Ответы (2)


Оказывается, это произошло из-за ошибки прав доступа на этом компьютере. Из-за того, что это был рабочий компьютер, у пользователя не было прав администратора. Это приводило к регистрации кликов, а затем немедленно вызывало исключение WinError 5. Я решил это, добавив еще одно исключение в свой блок try. "кроме PermissionError: pass" См. ниже реализацию

import csv
import pyautogui

pyautogui.PAUSE = 0.50
pyautogui.FAILSAFE = True


#click function requires arguments ('fullPathToImage', "Error Identifier")
def click(fullPathToImage, error):
    try:
        pyautogui.click(pyautogui.center(pyautogui.locateOnScreen(fullPathToImage)))
##################################    
    except PermissionError:
        pass
##################################    
    except:
        print(error, " not found, trying again")
        click(fullPathToImage, error)

def start():
    click('C:/projects/images/test.png', "test.png")
    pyautogui.typewrite("This is my test text")

if __name__ == '__main__':
    start()
person Mark Halls    schedule 25.07.2016

Это было исправлено в версии 0.9.34. (Или, по крайней мере, обошлось. Кажется, клики работают, но теперь PyAutoGUI подавляет это исключение.) Все, что вам нужно сделать, это установить или обновить PyAutoGUI из PyPI с помощью pip install -U pyautogui

person Al Sweigart    schedule 19.03.2017