Автоматизируйте свой компьютер с помощью Python – PyAutoGui

13 мая, 2020

Подписывайся на наш канал в Telegram, чтобы ежедневно совершенствоваться в Python. Там выходят задачи, полезные советы и сливы платных курсов - перейти

Сегодня вы узнаете, «Как автоматизировать компьютерную мышь и клавиатуру с помощью Python». Модуль PyAutoGui способен автоматизировать нашу мышь и клавиатуру Я видел много статей, связанных с этим модулем, но здесь я постараюсь дать вам некоторые уникальные идеи использования этого модуля.

Анимация мыши с помощью PyAutoGUI

Цель PyAutoGUI – предоставить кроссплатформенный модуль Python для автоматизации GUI для людей . API разработан так, чтобы быть максимально простым с разумными настройками по умолчанию. Я коснусь только основ этого модуля, также вы можете посмотреть на другие атрибуты и функции в документации модуля PyAutoGUI на PyPI.

Установка

Windows

В Windows гораздо проще установить и использовать PyAutoGUI . Вы можете установить его из PyPI с помощью pip, если у вас установлен pip.

pip install pyautogui

macOS:

В Os X вам необходимо установить несколько дополнительных модулей, чтобы можно было запускать PyAutoGui .

pip3 install pyobjc-core
pip3 install pyobjc
pip3 install pyautogui

Linux:

В Linux вам нужно установить несколько пакетов.

pip3 install python3-xlib
sudo apt-get install scrot
sudo apt-get install python3-tk
sudo apt-get install python3-dev
pip3 install pyautogui

Начало

Мы разберём следующие вещи, которые вы можете сделать используя PyAutoGUI.

  • Предохранители
  • Мышь
  • Клавиатура
  • Окно с сообщением
  • Скриншот 
  • Другие возможности

Предохранители

Пауза

Пауза – это опция в PyAutoGUI, которая устанавливает паузу между каждым вызовом модуля. Например: у нас есть две функции: одна записывает а другие кликают, вторая функция выполняется после заданной продолжительности, когда установлена ​​эта опция.

pyautogui.PAUSE = dur # 2.5

Отказоустойчивость

Этот параметр больше подходит для отмены программы с помощью сочетания клавиш CTRL + C. Если для этого параметра установлено значение True, программа прерывается и выдает pyautogui.FailSafeException исключение, перемещая мышь в верхний левый угол экрана.

pyautogui.FAILSAFE = True

Мышь

Движение мыши

Движение мыши

Вы можете переместить мышь в координаты x, y экрана, используя следующую функцию класса pyautogui

pyautogui.moveTo (x, y, duration = num_seconds)

где x и y – координаты XY на экране. X направляет направо, Y направляет вниз. Длительность – это время в секундах, в течении которого будет выполнятся это действие.

Есть еще одна функция, которая перемещает мышь относительно текущей позиции мыши, что означает, что она будет перемещать мышь (100 100) влево и вправо от текущей позиции мыши.

pyautogui.moveRel(xOffset, yOffset, duration=num_seconds)
# Вы также можете использовать pyautogui.move (xOffset, YOffset)

Здесь xOffset и yOffset – изменяют положение от текущей позиции мыши x и y соответственно.

Перетаскивание

Перетаскивание мышью

Перетаскивание – это еще одна удивительная и важная особенность мыши, перетаскивание просто означает перемещение мыши с зажатой кнопкой. Вы можете осуществить перетаскивание с помощью следующей функции.

pyautogui.dragTo(x, y, duration=num_seconds)
pyautogui.dragRel(xOffset, yOffset, duration=num_seconds)
# вы также можете использовать pyautogui.drag (xOffset, yOffset)

Объяснение этих функций аналогично движению мыши.

Клики

Различные типы кликов

Как вы знаете, есть разные типы кликов, которые мы можем выполнять с помощью мыши вручную. PyAutoGUI может позволить нам использовать многие из этих функций. Некоторые из них:

  • Одиночный, двойной и тройной клик
  • Кнопка мыши верх и вниз
  • Левый, правый и средний щелчок

Синтаксис:

pyautogui.click(x=None, y=None, clicks=1, interval=0.0, button='left', duration=0.0)

Вы можете использовать click()функцию следующим образом:

pyautogui.click() # нажатие мышью в текущей позиции
pyautogui.click(20,10) # перейти к позиции 20, 10, затем нажать левой кнопкой мыши
pyautogui.click(button='right') # нажатие правой кнопкой мыши
pyautogui.click(button='middle') # нажатие средней кнопкой мыши
pyautogui.click(button='left') # нажатие левой кнопкой мыши
pyautogui.click(clicks=2) # двойное нажатие левой кнопкой мыши
pyautogui.click(clicks=2, interval=0.25) # двойное нажатие левой кнопкой мыши, но с паузой в четверть секунды между щелчками
pyautogui.click(button='right', clicks=3, interval=0.25)
# тройное нажатие правой кнопкой мыши с паузой в четверть секунды между щелчками

Есть также отдельные функции, чтобы получить ту же работу.

pyautogui.doubleClick() # выполнить двойное нажатие левой кнопкой
pyautogui.rightClick() # выполнить нажатие правой кнопкой
pyautogui.middleClick() # выполнить нажатие средней кнопкой
pyautogui.trippleClick() # выполнить тройное нажатие левой кнопкой

Нажатие мыши и перетаскивание состоят из нажатия кнопки мыши, движение вниз, и отпускания ее обратно. Если вы хотите , чтобы выполнить эти действия отдельно, вызовите mouseDown()и mouseUp()функции. Они тоже имеют xy и button.

pyautogui.mouseDown(); pyautogui.mouseUp()  # делает то же самое, что и щелчок левой кнопкой мыши
pyautogui.mouseDown(button='right')  # нажатие правой кнопки и движение вниз
pyautogui.mouseUp(button='right', x=100, y=200)  # переместите мышь на 100, 200, затем отпустить правую кнопку.

Прокрутка

Прокрутка мышью

Колесо прокрутки у мыши можно имитировать, вызывая scroll() функцию и передавая целое число «нажатий» для прокрутки. Количество прокрутки в «нажатии» зависит от платформы.

Синтаксис

pyautogui.scroll(clicks, x=None, y=None)

Вы можете использовать scroll() функцию следующим образом:

pyautogui.scroll (10)    # прокрутить вверх на 10 "кликов" 
pyautogui.scroll (-10)   # прокрутить вниз на 10 "кликов" 
pyautogui.scroll (10, x = 100, y = 100)   # переместить курсор мыши на 100, 200, затем прокрутить до 10 "кликов"

Вы можете использовать hscroll() для прокрутки влево и вправо на платформах Linux и OSX.

Клавиатура

Написание

Написание слов с анимацией

Вы можете написать алфавит, слово или предложение с помощью функции из класса pyautogui. Он также предлагает задержку между каждым набирающим словом, что делает его более фантастическим.

pyautogui.typewrite ('Hello world!')  # печатает "Hello world!" немедленно

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

pyautogui.typewrite ('Hello world!', interval = 0,25) 
# печатает "Hello world!" с задержкой в ​​четверть секунды после каждого символа

Нажатие клавиш

Нажатие клавиш

Чтобы нажать эти клавиши, вызовите press() функцию и передайте ей определенные значения в строке.

Чтобы нажать более одной клавиши, передать список, он принимает другой необязательный атрибут, presses=1 который ограничивает количество нажатий клавиш (клавиши).

Существует также еще один атрибут interval=0.0– интервал между нажатиями клавиш.

Ключи для этой функции определены и могут быть получены с помощью следующей опции pyautogui.KEYBOARD_KEYS. Он напечатает список определенных ключей, которые он поддерживает. Например: enterupdownescf1. Смотрите KEYBOARD_KEYS .

pyautogui.press ('enter')   # нажать клавишу ввода
pyautogui.press ('f1')      # нажать клавишу F1
pyautogui.press ('left')    # нажать клавишу со стрелкой влево

press()это просто обертка для keyUp() и keyDown() функций, которые имитируют нажатие клавиши, а затем отпускание.

pyautogui.keyDown ('shift')   # удерживать клавишу Shift
pyautogui.keyUp ('shift')     # отпустить клавишу Shift

Сочетания клавиш

Нажатие на ярлык

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

pyautogui.hotkey ('ctrl', 'shift', 'esc') # одновременно нажать клавиши CTRL + SHIFT + ESC

Вышеуказанный код эквивалентен

pyautogui.keyDown ('ctrl')      # Удерживать кнопку CTRL 
pyautogui.keyDown ('shift')     # Удерживать кнопку SHIFT 
pyautogui.keyDown ('esc')       # Удерживать кнопку ESC 
pyautogui.keyUp ('esc')         # Отпустить кнопку ESC 
pyautogui.keyUp ('shift')       # Отпустить кнопку SHIFT 
pyautogui.keyUp ('ctrl')        # Отпустить кнопку CTRL

Сообщения

PyAutoGUI также отображает окна сообщений в стиле JavaScript. Предусмотрено четыре функции окна сообщений

Окно оповещения

Окно оповещения

Отображает простое окно сообщения с текстом и одной кнопкой ОК. Возвращает текст кнопки, на которую нажали.

pyautogui.alert (text = '', title = '', button = 'OK')

Окно подтверждения

Окно подтверждения

Отображает окно сообщения с кнопками OK и Отмена. Количество и текст кнопок могут быть настроены. Возвращает текст кнопки, на которую нажали.

pyautogui.confirm (text = '', title = '', buttons = ['OK', 'Cancel'])

Окно подсказки

Быстрое окно

Отображает окно сообщения с вводом текста и кнопки ОК и Отмена. Возвращает введенный текст или None, если нажать кнопку «Отмена».

pyautogui.prompt (text = '', title = '', default = '')

Окно пароля

Окно пароля

Отображает окно сообщения с вводом текста и кнопки ОК и Отмена. Типизированные символы отображаются как *. Возвращает введенный текст или None, если нажать кнопку «Отмена».

password(text='', title='', default='', mask='*')

Скриншот (поиск изображений)

PyAutoGUI может делать снимки экрана, сохранять их в файлы и находить изображения на экране. Это полезно, если у вас есть маленькое изображение, скажем, кнопки, которую нужно нажать, и вы хотите найти ее на экране

Снимок экрана

Вызов screenshot() вернет объект Image. Передача строки имени файла сохранит снимок экрана в файл, а также вернет его как объект изображения.

im1 = pyautogui.screenshot () 
im2 = pyautogui.screenshot ('my_screenshot.png')

Существует также необязательный region аргумент ключевого слова, если вы не хотите снимок экрана всего экрана. Вы можете передать четырехзначный кортеж left, top, width и height области для захвата:

im = pyautogui.screenshot (region = (0,0, 300, 400))

Нахождение изображения на экране

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

Калькулятор

и у вас есть изображение кнопки, например, изображение кнопки 7

7 кнопка

Вы можете вызвать locateOnScreen('7key.png') функцию, чтобы получить координаты экрана. Возвращаемое значение представляет собой 4-х целочисленный кортеж: (слева, сверху, ширина, высота). Однако, если вы просто хотите получить координаты x и y изображения на экране, вы можете вызвать, locateCenterOnScreen() который вернет только координаты x и y . Если изображение на экране не найдено, оно выведет ImageNotFoundException. Если вы хотите нажать на это изображение или объект, просто передайте координаты x и y из возвращаемых значений предыдущих функций в click()функцию. Чтобы узнать больше о размещении объектов на экране, перейдите по этой ссылке .

Другие особенности

Размер экрана

Чтобы получить размер экрана, в PyAutoGUI есть функция, size() которая возвращает кортеж целых чисел: (ширина, высота) для размера основного монитора.

pyautogui.size()    # вывод: Size(width=1366, height=768)

Положение курсора

Чтобы получить текущую позицию курсора, в PyAutoGUI есть функция, position() которая возвращает кортеж целых чисел: (x, y) для текущей позиции курсора мыши.

pyautogui.position()    # вывод: Point(x=487, y=664)

Идеи

Этот модуль можно использовать и во многих других случаях. Например, в некоторых компьютерных играх важна точность. Как вы думаете, вы можете перетащить мышь или нажать клавишу пробела более точно, чем ваш скрипт?

Игра Страшный лабиринт

Игра Страшный лабиринт

Цель состоит в том, чтобы переместить курсор по синему пути. Если вы дотронетесь до черного пикселя, вы вернетесь к началу.

Самым сложным, на мой взгляд, была заключительная часть, где коридор слишком узок. Что, если бы вы могли создать скрипт на python, для самостоятельного завершения лабиринта?

Игра Google Dino

Другой пример: вы наверняка знаете эту игру

Игра Google Динозавр

Он, вероятно, наименее любимый друг из всех пользователей Chrome, так как в него играют только когда нет интернета.  Цель состоит в том, чтобы просто избежать препятствий, которые приближаются к Динозавру.

Вы можете непрерывно делать снимки экрана своего игрового экрана и анализировать следующее:

  • как быстро движется препятствие?
  • как высоко это препятствие?
  • день или ночь? примечание: пиксели чередуются между черным и белым
  • сколько препятствий отображается в данный момент?
  • где должно быть препятствие для запуска команды прыжка / приседания?

На этом изображении препятствия классифицируются в красных прямоугольниках. Динозавр должен прыгнуть, если красная коробка коснулась зеленой линии. Здесь немного математики, но это неважно в данный момент. Если у вас есть рабочий код, которым вы хотите поделиться, то скидывайте в наш чат и добавляйте наивысший балл, который вы достигли, используя свой код.

Откладывание текстов

Была ли у вас когда-нибудь ситуация, когда вы заканчиваете писать свое письмо / сообщение в 3 часа утра и не знаете, отправлять ли его сразу или ждать до утра, чтобы избежать вопросов «почему вы не спите ночью, как нормальные люди»? Вот решение:

import pyautogui as pag
import time
time.sleep(21600)     #this is equivalent to six hours
pag.press("enter")

Этот скрипт поможет вам отложить отправку сообщения на 6 часов (либо меняйте задержку).

Читатель диаграммы

Несколько лет назад мы с другом обнаружили веб-сайт с потрясающей инвестиционными возможностями.

График цен для EUR / USD где-то в 2017 году

Все, что вам нужно было сделать, это решить, увеличилась или снизилась цена между текущим моментом и красной линией. Вы делаете ставку, и если ваше мнение было правильным, вы получите свою ставку + 90%. Поэтому мы подумали, что нам понадобится алгоритм, который статистически корректен более чем на 56%. Мы надеялись, что сможем создать алгоритм, который будет верен, по крайней мере, на 70–80% всех прогнозов, и мы будем плавать в огромном денежном океане.

При создании торгового алгоритма я не нашел способа получить доступ к тем же ценовым данным. Поэтому я создал функцию, которая читает график с захваченным скриншотом. Идея была проста: я перебрал ось X с простым циклом for. Если указана x-координата, я итерировал по оси y с другим для цикла, пока цвет пикселя не стал белым, а не оранжевым. Этот метод возвращает список относительных высот точек данных на рисунке. Соответствующий код был:

def get_price_data(screen):
    price_data = np.array([])
    for x in range(var.xstart, var.xend):
        for y in range(var.ystart, var.yend):
            pixel_color = screen.getpixel((x, y))
            if pixel_color == (43, 171, 63):
                price_data = np.append(price_data, -y)
                return price_data
            elif pixel_color == (255, 167, 77):
                price_data = np.append(price_data, -y)
                break

Вывод

PyAutoGUI – это удивительный инструмент для автоматизации, и с творческим подходом нет ограничений.

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

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


Совершенствуй знания каждый день у нас в Телеграм-каналах

Вопросы, реклама — VK | Telegram