Управляем курсором мыши в Python
Одним из инструментов автоматизации задач на компьютере являются программы, которые напрямую управляют клавиатурой и мышью. Эти программы могут управлять другими приложениями, посылая им виртуальные нажатия клавиш и щелчки мыши, просто - как если бы вы сидели за своим компьютером и сами взаимодействовали с приложениями. Этот метод известен как автоматизация графического интерфейса пользователя.
Автоматизация графического интерфейса пользователя чем то напоминает программирование манипулятора. Мы можем запрограммировать роботизированную руку так, чтобы она печатала на клавиатуре и перемещала мышь за нас. Этот метод особенно полезен для задач, связанных с бессмысленным щелчком или заполнением форм. Для подобных действий нужен отдельный программный модуль.
Таким модулем в Python является PyAutoGUI.
Установим его командой:
# для windows
pip install pyautogui
В зависимости от того, какую операционную систему вы используете, вам может потребоваться установить некоторые другие модули (так называемые зависимости), прежде чем мы сможем установить PyAutoGUI.
В Windows следующие действия пропускаем.
В OS X запустите sudo pip3 install pyobjc-framework-Quartz, sudo pip3 install pyobjc-core, а затем sudo pip3 install pyobjc.
В Linux запустите sudo pip3 install python3-xlib, sudo apt-get install scrot, sudo apt-get install python3-tk и sudo apt-get install python3-dev. (Scrot - это программа для создания снимков экрана, которую использует PyAutoGUI.)
После установки этих зависимостей запустите pip install pyautogui (или pip3 в OS X и Linux), чтобы установить PyAutoGUI.
Чтобы проверить, правильно ли установлен PyAutoGUI, запустим import pyautogui из интерактивной оболочки и проверим наличие сообщений об ошибках.
Прежде чем перейти к автоматизации с графическим интерфейсом, мы должны знать, как избежать проблем, которые могут возникнуть. Python может перемещать нашу мышь и печатать нажатия клавиш с невероятной скоростью, что может доставить некоторые проблемы. Кроме того, если что-то пойдет не так, но наша программа продолжит перемещать указатель мыши, и будет сложно сказать, что именно делает программа или как исправить проблему.
Мы можем заставить сценарий ждать после каждого вызова функции, что даст время для управления мышью и клавиатурой, если что-то пойдет не так. Для этого установим переменную pyautogui.PAUSE на количество секунд, на которое мы хотим, чтобы она приостанавливалась.Например, после установки pyautogui.PAUSE = 1.5 каждый вызов функцииPyAutoGUI будет ждать полторы секунды после выполнения своего действия. Инструкции, не относящиеся к PyAutoGUI, не будут иметь этой паузы.
PyAutoGUI также имеет отказоустойчивую функцию. Перемещение курсора мыши в верхний левый угол экрана приведет к тому, что PyAutoGUI вызовет исключение pyautogui.FailSafeException. Ваша программа может либо обработать это исключение с помощью операторов try и except, либо позволить исключению привести к сбою вашей программы. В любом случае функция отказоустойчивости остановит программу, если вы быстро переместите мышь как можно дальше вверх и влево. Мы можем отключить эту функцию, установив pyautogui.FAILSAFE = False. Введите в интерактивную оболочку следующее:
>>> import pyautogui
# поместите выполняемый код из следующих примеров
>>> pyautogui.PAUSE = 1
>>> pyautogui.FAILSAFE = True
Управление движением мыши
Прежде чем вы узнаете, как перемещать мышь и отслеживать ее положение на экране с помощью PyAutoGUI, давайте сначала разберемся, как PyAutoGUI работает с координатами.
Функции мыши PyAutoGUI используют координаты x и y. Начало координат, где x и y равны нулю, находится в верхнем левом углу экрана. Координаты x увеличиваются при движении вправо, а координаты y увеличиваются при движении вниз. Все координаты - целые положительные числа; отрицательных координат нету.
Разрешение - это высота и ширина экрана в пикселях. Если разрешение вашего экрана установлено на 1366 / 768, то координата для левого верхнего угла будет (0, 0), а координата для правого нижнего угла будет (1366, 768).
Функция pyautogui.size() возвращает кортеж из двух целых чисел ширины и высоты экрана в пикселях. Введем в интерактивную оболочку следующее:
>>> import pyautogui
>>> pyautogui.size()
#вывод
Size(width=1366, height=768)
#pyautogui.size() возвращает (1366, 768) на компьютере с разрешением 1366 / 768; в зависимости от разрешения вашего экрана возвращаемое значение может отличаться. Вы можете сохранить ширину и высоту из pyautogui.size() в переменных, таких как ширина и высота, для лучшей читаемости в ваших программах.
>>> width, height = pyautogui.size()
#вывод
(1366, 768)
Перемещение мыши
Теперь, когда мы разобрались с координатами экрана, давайте переместим мышь. Функция pyautogui.moveTo() мгновенно переместит курсор мыши в указанную позицию на экране. Целочисленные значения координат x и y составляют первый и второй аргументы функции соответственно. Необязательный аргумент целочисленного значения длительности или ключевого слова с плавающей запятой указывает количество секунд, необходимое для перемещения мыши к месту назначения. Если вы его не укажете, по умолчанию будет 0 для мгновенного движения. Все аргументы ключевого слова duration в функциях PyAutoGUI являются необязательными. Введем в интерактивную оболочку следующее:
>>> import pyautogui
>>> for i in range(10):
pyautogui.moveTo(100, 100, duration=0.25)
pyautogui.moveTo(200, 100, duration=0.25)
pyautogui.moveTo(200, 200, duration=0.25)
pyautogui.moveTo(100, 200, duration=0.25)
#В этом примере курсор мыши перемещается по часовой стрелке в виде квадрата между четырьмя координатами, указанными в общей сложности десять раз. Каждое движение занимает четверть секунды, как указано в аргументе ключевого слова duration = 0.25. Если бы вы не передали третий аргумент ни одному из вызовов pyautogui.moveTo(), курсор мыши мгновенно телепортировался бы от точки к точке.
Функция pyautogui.moveRel() перемещает курсор мыши относительно его текущей позиции.В следующем примере мышь перемещается по тому же квадратному шаблону, за исключением того, что он начинает квадрат с того места, где мышь оказывается на экране, когда запускается код:
>>> import pyautogui
>>> for i in range(10):
pyautogui.moveRel(100, 0, duration=0.25)
pyautogui.moveRel(0, 100, duration=0.25)
pyautogui.moveRel(-100, 0, duration=0.25)
pyautogui.moveRel(0, -100, duration=0.25)
# pyautogui.moveRel() также принимает три аргумента: сколько пикселей нужно переместить по горизонтали вправо, сколько пикселей переместить вертикально вниз и (необязательно) сколько времени потребуется для завершения перемещения. Отрицательное целоечисло для первого или второго аргумента приведет к перемещению мыши влево или вверх соответственно.
Получение координат мыши
Также мы можем определить текущее положение мыши, вызвав функцию pyautogui.position(), которая вернет кортеж позиций курсора мыши по x и y во время вызова функции. Введите в интерактивную оболочку следующее, перемещая мышь после каждого вызова:
>>> pyautogui.position()
# вывод
Point(x=182, y=495)
>>> pyautogui.position()
# вывод
Point(x=1365, y=767)
>>> pyautogui.position()
# вывод
Point(x=1338, y=767)
Таким образом мы научились программно управлять передвижением курсора мыши, получать координаты его положения на экране, а также использовали функцию прерывания программы.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.