Автор оригинала: Muhammad Junaid Khalid.
Вступление
В этом уроке мы узнаем, как использовать библиотеку pyautogui в Python 3. Библиотека PyAutoGUI
обеспечивает кросс-платформенную поддержку управления операциями мыши и клавиатуры с помощью кода для автоматизации задач. Библиотека pyautogui
также доступна для Python 2; однако мы будем использовать Python 3 на протяжении всего этого урока.
Такой инструмент имеет множество приложений, некоторые из которых включают в себя создание скриншотов, автоматизацию тестирования графического интерфейса (например, Selenium), автоматизацию задач, которые могут быть выполнены только с помощью графического интерфейса, и т. Д.
Прежде чем приступить к этому уроку, обратите внимание, что есть несколько предварительных условий. Вы должны иметь базовое представление о синтаксисе Python и/или иметь хотя бы начальный уровень программирования на каком-то другом языке. Кроме того, учебник довольно прост и удобен для начинающих.
Установка
Процесс установки для PyAutoGUI
довольно прост для всех операционных систем. Однако есть несколько зависимостей для Mac и Linux, которые необходимо установить, прежде чем библиотека PyAutoGUI
может быть установлена и использована в программах.
Окна
Для Windows PyAutoGUI
не имеет зависимостей. Просто запустите следующую команду в командной строке, и установка будет выполнена.
$ pip install PyAutoGUI
Мак
Для Mac сначала необходимо последовательно установить модули pyobjc-core
и pyobjc
. Ниже приведены команды, которые необходимо последовательно выполнить в вашем терминале для успешной установки:
$ pip3 install pyobjc-core $ pip3 install pyobjc $ pip3 install pyautogui
Линукс
Для Linux единственной зависимостью является python3-xlib
(для Python 3). Чтобы установить его, а затем pyautogui
, выполните две команды, упомянутые ниже в вашем терминале:
$ pip3 install python3-xlib $ pip3 install pyautogui
Основные Примеры Кода
В этом разделе мы рассмотрим некоторые из наиболее часто используемых функций из библиотеки PyAutoGUI
.
Общие функции
Функция position()
Прежде чем мы сможем использовать функции PyAutoGUI
, нам нужно импортировать их в нашу программу:
import pyautogui as pag
Эта функция position()
сообщает нам текущее положение мыши на нашем экране:
pag.position()
Выход:
Point (x = 643, y = 329)
Функция onScreen()
Функция onScreen()
сообщает нам, существует ли на экране точка с координатами x и y:
print(pag.onScreen(500, 600)) print(pag.onScreen(0, 10000))
Выход:
True False
Здесь мы видим, что первая точка существует на экране, но вторая точка выходит за пределы размеров экрана.
Функция size()
Функция size()
находит высоту и ширину (разрешение) экрана.
pag.size()
Выход:
Size (width = 1440, height = 900)
Ваш вывод может быть разным и будет зависеть от размера вашего экрана.
Общие Операции с Мышью
В этом разделе мы рассмотрим PyAutoGUI
функции для манипулирования мышью, которые включают в себя как перемещение положения курсора, так и автоматическое нажатие кнопок с помощью кода.
Функция moveTo()
Синтаксис функции moveTo()
выглядит следующим образом:
pag.moveTo(x_coordinate, y_coordinate)
Значение x_coordinate
увеличивается слева направо на экране, а значение y_coordinate
увеличивается сверху вниз. Значение обоих x_coordinate
и y_coordinate
в левом верхнем углу экрана равно 0.
Посмотрите на следующий сценарий:
pag.moveTo(0, 0) pag.PAUSE = 2 pag.moveTo(100, 500) # pag.PAUSE = 2 pag.moveTo(500, 500)
В приведенном выше коде основное внимание уделяется функции moveTo ()
, которая перемещает курсор мыши по экрану на основе координат, которые мы предоставляем в качестве параметров. Первый параметр-это координата x, а второй-координата y. Важно отметить, что эти координаты представляют абсолютное положение курсора.
Еще одна вещь, которая была введена в приведенном выше коде, – это свойство PAUSE
; оно в основном приостанавливает выполнение скрипта на заданное количество времени. Свойство PAUSE
было добавлено в вышеприведенный код, чтобы вы могли видеть выполнение функции; в противном случае функции будут выполняться за долю секунды, и вы не сможете увидеть, как курсор перемещается из одного места в другое на экране.
Другим обходным путем для этого было бы указать время для каждой операции move To()
в качестве третьего параметра функции, например moveTo(x, y, time_in_seconds)
.
Выполнение приведенного выше сценария может привести к следующей ошибке:
Примечание: Возможная Ошибка
Traceback (most recent call last): File "a.py", line 5, inpag.moveTo (100, 500) File "/anaconda3/lib/python3.6/site-packages/pyautogui/__init__.py", line 811, in moveTo _failSafeCheck() File "/anaconda3/lib/python3.6/site-packages/pyautogui/__init__.py", line 1241, in _failSafeCheck raise FailSafeException ('PyAutoGUI fail-safe triggered from mouse moving to a corner of the screen. To disable this fail-safe, set pyautogui.FAILSAFE to False. DISABLING FAIL-SAFE IS NOT RECOMMENDED.') pyautogui.FailSafeException: PyAutoGUI fail-safe triggered from mouse moving to a corner of the screen. To disable this fail-safe, set pyautogui.FAILSAFE to False. DISABLING FAIL-SAFE IS NOT RECOMMENDED.
Если выполнение функции moveTo()
приводит к ошибке, аналогичной показанной выше, это означает, что отказоустойчивость вашего компьютера включена. Чтобы отключить отказоустойчивость, добавьте следующую строку в начале кода:
pag.FAILSAFE = False
Эта функция включена по умолчанию, так что вы можете легко остановить выполнение вашей программы pyautogui
, вручную переместив мышь в верхний левый угол экрана. Как только мышь окажется в этом месте, pyautogui
выдаст исключение и выйдет.
Функция moveRel()
Координаты функции moveTo()
являются абсолютными. Однако если вы хотите переместить положение мыши относительно текущего положения мыши, вы можете использовать функцию moveRel ()
.
Это означает, что опорной точкой для этой функции при перемещении курсора будет не верхняя левая точка на экране (0, 0), а текущее положение курсора мыши. Итак, если ваш курсор мыши в данный момент находится в точке (100, 100) на экране и вы вызываете функцию moveRel()
с параметрами (100, 100, 2)
новая позиция вашего курсора перемещения будет (200, 200).
Вы можете использовать функцию moveRel ()
, как показано ниже:
pag.moveRel(100, 100, 2)
Приведенный выше скрипт переместит курсор на 100 пунктов вправо и на 100 пунктов вниз за 2 секунды относительно текущего положения курсора.
Функция click()
Функция click()
используется для имитации операций щелчка мыши. Синтаксис функции click()
выглядит следующим образом:
pag.click(x, y, clicks, interval, button)
Эти параметры объясняются следующим образом:
x
: x-координата точки, до которой нужно добратьсяy
: y-координата точки достиженияклики
: количество кликов, которые вы хотели бы сделать, когда курсор достигнет этой точки на экране.интервал
: количество времени в секундах между каждым щелчком мыши, т. е. если вы делаете несколько щелчков мышикнопка
: укажите, какую кнопку мыши вы хотели бы нажать, когда курсор достигнет этой точки на экране. Возможные значения:right
,left
иmiddle
.
Вот пример:
pag.click(100, 100, 5, 2, 'right')
Вы также можете выполнять определенные функции щелчка мыши следующим образом:
pag.rightClick(x, y) pag.doubleClick(x, y) pag.tripleClick(x, y) pag.middleClick(x, y)
Здесь x
и y
представляют координаты x
и y
, как и в предыдущих функциях.
Вы также можете иметь более точный контроль над щелчками мыши, указав, когда нажимать мышь вниз, а когда отпускать ее вверх. Это делается с помощью функций mouseDown
и mouseUp
соответственно.
Вот краткий пример:
pag.mouseDown(x=x, y=y, button='left') pag.mouseUp(x=x, y=y, button='left')
Приведенный выше код эквивалентен просто выполнению вызова page.click(x, y)
.
Функция scroll()
Последняя функция мыши, которую мы рассмотрим, – это scroll
. Как и ожидалось, у него есть два варианта: прокрутка вверх и прокрутка вниз. Синтаксис функции scroll()
выглядит следующим образом:
pag.scroll(amount_to_scroll, x=x_movement, y=y_movement)
Для прокрутки вверх укажите положительное значение параметра amount_to_scroll
, а для прокрутки вниз-отрицательное. Вот пример:
pag.scroll(100, 120, 120)
Хорошо, это было все для функций мыши. К настоящему времени вы должны быть в состоянии управлять кнопками мыши, а также движениями с помощью кода. Теперь перейдем к функциям клавиатуры. Их много, но мы рассмотрим только те, которые наиболее часто используются.
Общие Операции с Клавиатурой
Прежде чем мы перейдем к функциям, важно знать , какие клавиши можно нажимать через код в pyautogui
, а также их точное соглашение об именовании. Для этого запустите следующий скрипт:
print(pag.KEYBOARD_KEYS)
Выход:
['\t', '\n', '\r', ' ', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', 'accept', 'add', 'alt', 'altleft', 'altright', 'apps', 'backspace', 'browserback', 'browserfavorites', 'browserforward', 'browserhome', 'browserrefresh', 'browsersearch', 'browserstop', 'capslock', 'clear', 'convert', 'ctrl', 'ctrlleft', 'ctrlright', 'decimal', 'del', 'delete', 'divide', 'down', 'end', 'enter', 'esc', 'escape', 'execute', 'f1', 'f10', 'f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f2', 'f20', 'f21', 'f22', 'f23', 'f24', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'final', 'fn', 'hanguel', 'hangul', 'hanja', 'help', 'home', 'insert', 'junja', 'kana', 'kanji', 'launchapp1', 'launchapp2', 'launchmail', 'launchmediaselect', 'left', 'modechange', 'multiply', 'nexttrack', 'nonconvert', 'num0', 'num1', 'num2', 'num3', 'num4', 'num5', 'num6', 'num7', 'num8', 'num9', 'numlock', 'pagedown', 'pageup', 'pause', 'pgdn', 'pgup', 'playpause', 'prevtrack', 'print', 'printscreen', 'prntscrn', 'prtsc', 'prtscr', 'return', 'right', 'scrolllock', 'select', 'separator', 'shift', 'shiftleft', 'shiftright', 'sleep', 'space', 'stop', 'subtract', 'tab', 'up', 'volumedown', 'volumemute', 'volumeup', 'win', 'winleft', 'winright', 'yen', 'command', 'option', 'optionleft', 'optionright']
Функция пишущей машинки()
Функция typewriter()
используется для ввода чего-либо в текстовое поле. Синтаксис этой функции выглядит следующим образом:
pag.typewrite(text, interval)
Здесь текст
– это то, что вы хотите ввести в поле, а интервал
– это время в секундах между каждым нажатием клавиши. Вот пример:
pag.typewrite('Junaid Khalid', 1)
При выполнении описанного выше скрипта в выбранное в данный момент поле будет введен текст “Джунаид Халид” с паузой в 1 секунду между каждым нажатием клавиши.
Еще один способ использования этой функции-передача списка клавиш, которые вы хотите нажать в определенной последовательности. Чтобы сделать это с помощью кода, см. пример ниже:
pag.typewrite(['j', 'u', 'n', 'a', 'i', 'd', 'e', 'backspace', 'enter'])
В приведенном выше примере будет введен текст junaid
, после чего будет удален трейлинг e
. Ввод в текстовое поле будет выполнен нажатием клавиши Enter
.
Функция горячей клавиши()
Если вы до сих пор этого не заметили, то ключи, которые мы показали выше, не упоминают о комбинированных операциях, таких как Control + C
для команды копирования. Если вы думаете, что можете сделать это, передав список ['ctrl', 'c']
функции typewriter ()
, то вы ошибаетесь. Функция typewriter()
будет нажимать обе эти кнопки последовательно, не одновременно. И как вы, наверное, уже знаете, чтобы выполнить команду копирования, вам нужно нажать клавишу C
, удерживая клавишу ctrl
.
Для одновременного нажатия двух или более клавиш можно использовать функцию hotkey ()
, как показано здесь:
pag.hotkey('shift', 'enter') pag.hotkey('ctrl', '2' ) # For the @ symbol pag.hotkey('ctrl', 'c') # For the copy command
Функция screenshot()
Если вы хотите сделать снимок экрана в любом случае, функция screenshot ()
– это то, что вы ищете. Давайте посмотрим, как мы можем реализовать это с помощью Пятогуй
:
scree_shot = pag.screenshot() # to store a PIL object containing the image in a variable
Это сохранит объект PIL , содержащий изображение в переменной.
Однако если вы хотите сохранить снимок экрана непосредственно на своем компьютере, вы можете вызвать функцию screenshot
следующим образом:
pag.screenshot('ss.png')
Это позволит сохранить снимок экрана в файле с указанным именем файла на вашем компьютере.
Функции confirm(), alert () и prompt()
Последний набор функций, которые мы рассмотрим в этом уроке, – это функции окна сообщений. Вот список функций окна сообщений, доступных в Пятогуй
:
- Окно подтверждения: Отображает информацию и дает вам два варианта, т. е.
OK
иОтмена
- Окно оповещения: Отображает некоторую информацию и подтверждает, что вы ее прочитали. Он отображает одну кнопку, т. е.
OK
- Окно запроса: Запрашивает некоторую информацию у пользователя, и после ввода пользователь должен нажать кнопку
OK
Теперь, когда мы увидели типы, давайте посмотрим, как мы можем отображать эти кнопки на экране в той же последовательности, что и выше:
pag.confirm("Are you ready?") pag.alert("The program has crashed!") pag.prompt("Please enter your name: ")
В выходных данных вы увидите следующую последовательность окон сообщений.
Подтверждать:
Тревога:
Незамедлительный:
Вывод
В этом уроке мы узнали, как использовать библиотеку автоматизации PyAutoGUI
в Python. Мы начали с обсуждения предварительных условий для этого учебника, процесса его установки для различных операционных систем, а затем узнали о некоторых его общих функциях. После этого мы изучили функции, характерные для движений мыши, управления мышью и управления клавиатурой.
После выполнения этого урока вы сможете использовать PyAutoGUI
для автоматизации операций графического интерфейса для повторяющихся задач в вашем собственном приложении.