Python PyAutoGUI: автоматизация работы с графическим интерфейсом
PyAutoGUI позволяет программе двигать курсор, кликать, печатать и искать элементы на экране по картинке. Это самый простой способ автоматизировать рутину в приложениях, у которых нет API: заполнение однотипных форм, выгрузку отчетов, повторяющиеся клики.
Вы узнаете основные возможности и методы библиотеки, а в новом разделе разберем то, на чем спотыкаются почти все: почему write() не печатает русские буквы, как остановить вышедший из-под контроля скрипт, что делать, если картинка не находится, и как масштаб экрана Windows сбивает координаты. Примеры проверены для Python 3.12 и 3.13.

Содержание статьи
1. Что такое PyAutoGUI
PyAutoGUI - это мощная библиотека Python, предназначенная для автоматизации управления мышью и клавиатурой на экране компьютера. Она позволяет программно имитировать действия пользователя, такие как перемещение курсора, клики мыши, нажатия клавиш клавиатуры, а также другие взаимодействия с графическим пользовательским интерфейсом (GUI).
PyAutoGUI может использоваться для создания скриптов, которые выполняют различные задачи автоматически, что особенно полезно при рутинных операциях или тестировании программного обеспечения. Благодаря своей простой и интуитивной API, PyAutoGUI становится отличным инструментом для автоматизации рабочих процессов на компьютере, упрощая выполнение монотонных задач и повышая производительность.
2. Для чего нужен PyAutoGUI
PyAutoGUI предоставляет возможность автоматизировать ряд действий на компьютере, что делает его востребованным инструментом в различных областях. Вот некоторые из основных областей применения PyAutoGUI:
- Автоматизация рутинных задач: PyAutoGUI позволяет создавать скрипты для выполнения однообразных задач, таких как запуск приложений, копирование и вставка данных, отправка сообщений и многое другое. Это помогает сэкономить время и снизить вероятность ошибок при выполнении повторяющихся операций.
- Тестирование программного обеспечения: PyAutoGUI может использоваться для автоматизации тестирования программного обеспечения, включая GUI-тестирование. Создание скриптов позволяет проводить автоматические тесты на приложениях, проверять их функциональность и стабильность.
- Создание ботов и макросов: С помощью PyAutoGUI можно разрабатывать ботов для выполнения определенных задач в автоматическом режиме. Например, боты могут автоматизировать процессы веб-скрапинга, управления игровыми персонажами или выполнения действий в приложениях.
- Удаленное управление: PyAutoGUI может быть использован для удаленного управления компьютером, что полезно в случаях, когда необходимо автоматизировать действия на удаленной машине или сервере.
В целом, PyAutoGUI является мощным инструментом для автоматизации работы с графическим интерфейсом, который может значительно упростить выполнение различных задач и повысить эффективность пользовательского опыта.
3. Возможности PyAutoGUI
PyAutoGUI предлагает широкий спектр возможностей для управления мышью, клавиатурой и другими элементами графического интерфейса пользователя (GUI). Некоторые из основных возможностей PyAutoGUI включают:
- Управление мышью: При помощи PyAutoGUI можно перемещать курсор мыши по экрану, выполнять клики и двойные клики, а также выполнить скроллинг. Это позволяет автоматизировать действия, которые обычно выполняются пользователем вручную.
- Управление клавиатурой: Библиотека позволяет эмулировать нажатия клавиш клавиатуры, ввод текста, а также использовать комбинации клавиш. Это полезно при создании скриптов для автоматизации ввода данных или управления приложениями через клавиатуру.
- Работа с изображениями: PyAutoGUI предоставляет возможность поиска и сравнения изображений на экране. Это может быть использовано для определения расположения элементов на экране, а также для выполнения действий на основе обнаруженных изображений.
- Работа с окнами: Библиотека позволяет получать информацию о различных окнах и элементах GUI, таких как заголовки окон, координаты элементов и другие характеристики. Это облегчает взаимодействие с приложениями и окружающими элементами на экране.
Благодаря этим возможностям, PyAutoGUI становится мощным средством для автоматизации работы с графическим интерфейсом и обеспечивает широкие возможности для создания скриптов автоматизации и оптимизации рабочих процессов на компьютере.
4. Методы PyAutoGUI
PyAutoGUI предлагает разнообразные методы для управления взаимодействием с экраном компьютера. Ниже приведены некоторые из основных методов PyAutoGUI:
moveTo(x, y): Этот метод перемещает курсор мыши на экране в указанные координаты(x, y). Это позволяет управлять положением курсора для выполнения действий в конкретной области экрана.click(): Данный метод эмулирует клик левой кнопкой мыши в текущем положении курсора. Он может использоваться для выполнения действий, которые требуют клика мышью.typewrite(text): С помощью этого метода можно вводить текст с клавиатуры. Передавая нужный текст в качестве аргументаtext, можно симулировать ввод сочетаний символов и слов.screenshot(): Методscreenshot()позволяет делать снимок экрана в виде изображения. Это может быть полезно для последующего анализа или обработки изображения.locateOnScreen(image): Данный метод ищет изображение, переданное в качестве аргументаimage, на экране. Если изображение найдено, метод возвращает прямоугольник Box(left, top, width, height); если нет, в актуальных версиях выбрасывается pyautogui.ImageNotFoundException. Это может быть использовано для автоматизации действий на основе обнаруженных изображений.
Эти методы обеспечивают широкие возможности для контроля за экраном компьютера и позволяют создавать скрипты автоматизации, которые выполняют различные действия на основе визуальных и текстовых данных на экране.
5. Примеры использования PyAutoGUI
PyAutoGUI может быть применен во множестве сценариев для автоматизации различных задач на компьютере. Ниже приведен пример использования PyAutoGUI для создания скрипта, который открывает текстовый редактор и печатает сообщение "Hello, PyAutoGUI!":
Задача 1. Пример - Hello, PyAutoGUI
import pyautogui
import time
# Открываем текстовый редактор (Notepad)
pyautogui.hotkey('win', 'r') # открываем "Выполнить"
pyautogui.typewrite('notepad') # печатаем "notepad"
pyautogui.press('enter') # нажимаем Enter
time.sleep(1) # ждем 1 секунду
pyautogui.typewrite('Hello, PyAutoGUI!') # печатаем сообщение
# Сохраняем и закрываем файл
pyautogui.hotkey('ctrl', 's') # сохраняем файл
time.sleep(1)
pyautogui.typewrite('example.txt') # название файла
pyautogui.press('enter') # нажимаем Enter
time.sleep(1)
pyautogui.hotkey('ctrl', 'w') # закрываем файл
# Это всего лишь один из множества возможных сценариев применения PyAutoGUI. Благодаря его функциональности, можно создавать скрипты автоматизации для различных задач, управлять приложениями, выполнять действия на основе визуальных данных и многое другое.
Задача 2. Пример - Управление браузером с помощью pyautogui
import pyautogui
import time
# Открываем браузер (Google Chrome)
pyautogui.hotkey('win', 'r') # открываем "Выполнить"
pyautogui.typewrite('chrome')
pyautogui.press('enter')
time.sleep(2) # ждем, пока браузер загрузится
# Переходим на сайт Google
pyautogui.typewrite('https://www.google.com')
pyautogui.press('enter')
time.sleep(2)
# Вводим запрос в поисковую строку и нажимаем Enter
query = "PyAutoGUI examples"
pyautogui.click(400, 200) # кликаем в поле поиска
pyautogui.typewrite(query)
pyautogui.press('enter')
time.sleep(2)
# Это еще один пример использования PyAutoGUI, который демонстрирует возможность автоматизации действий в браузере. Благодаря PyAutoGUI можно создавать скрипты для выполнения различных действий в веб-интерфейсах, что упрощает работы с веб-приложениями и сервисами.
Этот пример показывает, как PyAutoGUI может использоваться для контроля за браузером, взаимодействия с веб-сайтами и выполнения поисковых запросов автоматически. При необходимости такие скрипты могут быть адаптированы под конкретные задачи и потребности пользователя.
Задача 3. Пример - Рисуем в Paint с помощью pyautogui
import pyautogui
import time
# Открываем графическое приложение Paint
pyautogui.hotkey('win', 'r') # открываем "Выполнить"
pyautogui.typewrite('mspaint') # запускаем Paint
pyautogui.press('enter')
time.sleep(2) # ждем, пока Paint загрузится
# Рисуем простую фигуру (например, квадрат)
pyautogui.moveTo(300, 300) # перемещаем курсор в начальное положение
pyautogui.dragTo(400, 400, duration=1) # рисуем квадрат
# Сохраняем изображение
pyautogui.hotkey('ctrl', 's') # вызываем окно сохранения
time.sleep(1)
pyautogui.typewrite('square.png') # указываем имя файла
pyautogui.press('enter') # сохраняем файл
# Этот пример демонстрирует возможность использования PyAutoGUI для управления графическими приложениями и выполнения действий на основе координат на экране. PyAutoGUI позволяет автоматизировать процессы рисования, редактирования и сохранения изображений.
Этот скрипт иллюстрирует, как PyAutoGUI может быть применен для работы с графическими приложениями, выполнения операций рисования и управления элементами интерфейса. При необходимости такие скрипты могут быть расширены и настроены под конкретные задачи пользователя.
Задача 4. Пример - Управление буфером обмена с помощью pyautogui
import pyautogui
import time
# Открываем текстовый документ и копируем текст
pyautogui.hotkey('win', 'r') # открываем "Выполнить"
pyautogui.typewrite('notepad') # запускаем Notepad
pyautogui.press('enter')
time.sleep(1)
pyautogui.typewrite('Пример текста для копирования.') # пишем текст
pyautogui.hotkey('ctrl', 'a') # выделяем весь текст
pyautogui.hotkey('ctrl', 'c') # копируем текст
# Открываем браузер и вставляем скопированный текст
pyautogui.hotkey('win', 'r') # открываем "Выполнить"
pyautogui.typewrite('chrome') # запускаем Chrome
pyautogui.press('enter')
time.sleep(2)
pyautogui.typewrite('https://www.google.com') # переходим на Google
pyautogui.press('enter')
time.sleep(2)
pyautogui.click(400, 200) # кликаем в поле поиска
pyautogui.hotkey('ctrl', 'v') # вставляем скопированный текст
# Этот пример демонстрирует возможность использования PyAutoGUI для копирования и вставки текста между различными приложениями. PyAutoGUI позволяет автоматизировать действия, связанные с обменом информацией между приложениями и окружением рабочего стола.
Этот скрипт показывает, как PyAutoGUI может быть использован для автоматизации операций копирования и вставки текста между различными программами. При необходимости подобные скрипты могут быть адаптированы и расширены для выполнения специфических задач пользователя.
Задача 5. Пример - Отправка сообщений в телеграм с помощью pyautogui
import pyautogui
import time
# Открываем приложение Telegram
pyautogui.hotkey('win', 'r') # открываем "Выполнить"
pyautogui.typewrite('telegram') # запускаем Telegram
pyautogui.press('enter')
time.sleep(5) # ждем, пока Telegram загрузится
# Находим контакт и отправляем сообщение
search_x, search_y = 300, 100
message_x, message_y = 400, 200
contact_name = "Имя_контакта"
message_text = "Привет, это автоматическое сообщение!"
pyautogui.click(search_x, search_y) # кликаем в поле поиска
pyautogui.typewrite(contact_name) # вводим имя контакта
time.sleep(2)
pyautogui.press('enter') # выбираем контакт
time.sleep(2)
pyautogui.click(message_x, message_y) # кликаем в поле ввода сообщения
pyautogui.typewrite(message_text) # пишем сообщение
pyautogui.press('enter') # отправляем сообщение
# Этот пример демонстрирует возможность использования PyAutoGUI для автоматизации отправки сообщений через мессенджеры. PyAutoGUI позволяет управлять интерфейсом приложений, взаимодействовать с элементами пользовательского интерфейса и выполнять различные действия на основе координат экрана.
Этот скрипт иллюстрирует, как можно использовать PyAutoGUI для автоматизации отправки сообщений через мессенджер Telegram. Подобные скрипты могут быть адаптированы под различные мессенджеры и специфические потребности пользователя.
Заключение
PyAutoGUI - мощный инструмент автоматизации действий на компьютере, который позволяет управлять приложениями, выполнять действия на основе визуальных данных и оптимизировать рабочие процессы. Благодаря своей простоте и гибкости, PyAutoGUI может быть использован для широкого спектра задач, начиная от создания скриптов для работы с графическим интерфейсом до автоматизации взаимодействия с веб-приложениями и мессенджерами.
С помощью PyAutoGUI пользователи могут создавать персонализированные скрипты, адаптированные под свои потребности, что позволяет существенно увеличить эффективность и продуктивность работы за компьютером. Надеемся, что представленные примеры использования PyAutoGUI в данном контексте помогли вам лучше понять возможности этой библиотеки и вдохновили на ее применение для решения ваших задач.
Как писать надежные скрипты на PyAutoGUI
В этом разделе: аварийная остановка и пауза, ввод русского текста, поиск элемента по картинке, типичные проблемы.
Аварийная остановка и пауза
Скрипт, который кликает не туда, может натворить бед быстрее, чем вы успеете его закрыть. В PyAutoGUI по умолчанию включен режим FAILSAFE: резко уведите мышь в любой угол экрана, и следующая команда выбросит pyautogui.FailSafeException. Не отключайте его. Параметр PAUSE задает задержку после каждой команды и дает интерфейсу время отреагировать.
import pyautogui
pyautogui.FAILSAFE = True # значение по умолчанию, оставьте его
pyautogui.PAUSE = 0.3 # 0.3 секунды после каждого действия
print(pyautogui.size()) # разрешение экрана, например Size(width=1920, height=1080)
print(pyautogui.position()) # текущие координаты курсора
Ввод русского текста
Функции write() и ее старое имя typewrite() эмулируют нажатия клавиш и знают только латинскую раскладку. Кириллицу они пропускают. Надежный способ - положить текст в буфер обмена и вставить его сочетанием клавиш:
import pyautogui
import pyperclip # pip install pyperclip
def paste_text(text: str) -> None:
pyperclip.copy(text)
pyautogui.hotkey("ctrl", "v") # на macOS: "command", "v"
paste_text("Отчет за октябрь готов")
Поиск элемента по картинке
try:
point = pyautogui.locateCenterOnScreen(
"button_ok.png", confidence=0.9, grayscale=True
)
pyautogui.click(point)
except pyautogui.ImageNotFoundException:
print("Кнопка не найдена на экране")
locateOnScreen() возвращает прямоугольник Box(left, top, width, height), а locateCenterOnScreen() сразу точку центра. В актуальных версиях при неудаче выбрасывается ImageNotFoundException, в старых возвращался None, поэтому проверка if point is None в новых версиях не сработает. Параметр confidence требует установленного пакета opencv-python.
Шаблон кнопки вырезайте из скриншота того же экрана, на котором будет работать скрипт, и делайте его небольшим: надпись и часть рамки без фона вокруг. Ограничьте область поиска параметром region=(x, y, ширина, высота), это ускоряет поиск в несколько раз и снижает риск найти похожий элемент в другом месте. Перед кликом по только что открытому окну добавьте ожидание: цикл с несколькими попытками поиска надежнее одной фиксированной паузы.
Типичные проблемы
| Симптом | Причина | Решение |
|---|---|---|
| Клик смещен относительно кнопки | масштаб экрана Windows 125 или 150 процентов | делайте шаблоны скриншотом на той же машине, проверяйте pyautogui.size() |
| Картинка не находится | другая тема, масштаб, сглаживание | вырезайте небольшой уникальный фрагмент, используйте confidence |
| Скрипт не работает на сервере | нет графического сеанса | PyAutoGUI нужен реальный рабочий стол; на Linux требуется X11 |
| Нажатия уходят не в то окно | окно не в фокусе | кликните по окну перед вводом или добавьте паузу |
Частые вопросы
Ответы на типичные вопросы читателей, которые помогут избежать частых ошибок.
Как остановить скрипт PyAutoGUI, если он вышел из-под контроля?
Резко переместите мышь в любой угол экрана: при включенном FAILSAFE следующая команда прервет программу исключением. Если скрипт запущен из терминала, также помогает Ctrl+C в окне терминала.
Почему write() не печатает русские буквы?
Функция нажимает клавиши по их названиям и поддерживает только символы, для которых есть клавиша в английской раскладке. Для кириллицы и эмодзи копируйте текст в буфер через pyperclip и вставляйте его через hotkey("ctrl", "v").
Работает ли PyAutoGUI в фоновом режиме или при заблокированном экране?
Нет. Библиотека эмулирует реальные действия пользователя, поэтому нужен активный рабочий стол с открытым окном. Для фоновой автоматизации сайтов используйте Selenium или Playwright, а для приложений Windows библиотеку pywinauto.
Как узнать координаты нужной кнопки?
Вызовите в терминале pyautogui.displayMousePosition(), она выводит координаты курсора в реальном времени, или выполните в цикле print(pyautogui.position()) и наведите курсор на элемент. Надежнее не хранить координаты, а находить кнопку по картинке через locateCenterOnScreen().