PyAutoGUI – автоматизация интерфейса

онлайн тренер по питону
Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

Введение

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

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

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

Основная часть

Установка и подключение

pip install pyautogui

Также желательно установить:

  • pillow — для работы с изображениями

  • pygetwindow, pymsgbox — для окон и диалогов


Архитектура и базовые возможности

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

Основные блоки:

  • Управление мышью

  • Работа с клавиатурой

  • Работа с экраном и скриншотами

  • Поиск изображений и шаблонов

  • Диалоговые окна


Управление мышью

Перемещение курсора

import pyautogui
pyautogui.moveTo(100, 200)
pyautogui.moveRel(50, 0)

Получение позиции

x, y = pyautogui.position()

Клик мышью

pyautogui.click()
pyautogui.doubleClick()
pyautogui.rightClick()

Drag & Drop

pyautogui.dragTo(400, 400, duration=1)

Скроллинг

pyautogui.scroll(500)

Управление клавиатурой

Ввод текста

pyautogui.write("Hello, world!", interval=0.05)

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

pyautogui.press("enter")
pyautogui.hotkey("ctrl", "s")

Список поддерживаемых клавиш

print(pyautogui.KEYBOARD_KEYS)

Работа с экраном

Получение разрешения экрана

width, height = pyautogui.size()

Сделать скриншот

screenshot = pyautogui.screenshot()
screenshot.save("screen.png")

Получение цвета пикселя

color = pyautogui.pixel(100, 200)

Поиск изображений на экране

Простой поиск

location = pyautogui.locateOnScreen("button.png")

Центр найденной области

center = pyautogui.locateCenterOnScreen("button.png")

Учет точности

pyautogui.locateOnScreen("icon.png", confidence=0.8)

Требует OpenCV (pip install opencv-python) для работы с параметром confidence


Работа с окнами и диалогами

Диалоговое окно с вводом

import pymsgbox
name = pymsgbox.prompt("Введите имя")

Вывод алерта

pymsgbox.alert("Операция завершена")

Работа с окнами (через pygetwindow)

import pygetwindow
window = pygetwindow.getWindowsWithTitle("Notepad")[0]
window.minimize()

Управление временем и безопасностью

Паузы между действиями

pyautogui.PAUSE = 0.5

Фейлсейф (движение мыши в угол экрана для прерывания)

pyautogui.FAILSAFE = True

Частые ошибки и отладка

  • ImageNotFoundException — не найдено изображение на экране

  • OSError: screen grab failed — проблемы с правами (особенно на macOS)

  • Отсутствие задержек может привести к сбоям (используйте time.sleep)


Практические кейсы

GUI-тестирование

Автоматическая проверка открытия, ввода, нажатия кнопок и переходов по интерфейсу.

Игровые боты

Автоматизация кликов, распознавание и действия по шаблонам на экране.

Работа с Excel/Word

Открытие файлов, вставка текста, сохранение — без COM-интерфейса.

Рутинные действия

Открытие почты, отправка писем, взаимодействие с CRM или терминалом.


Интеграции и дополнения

  • pygetwindow — работа с окнами

  • pymsgbox — диалоги

  • pillow — манипуляции с изображениями

  • cv2 — OpenCV для распознавания


Сравнение с альтернативами

Библиотека Язык GUI-автоматизация Поддержка поиска по экрану Платформенность
PyAutoGUI Python Да Да Windows, macOS, Linux
AutoHotKey Собственный Частично Ограничено Только Windows
SikuliX Java Да Расширенно Windows, macOS

Основные модули Docker SDK

  1. docker.DockerClient – основной клиент для работы с Docker.

  2. docker.models.containers – управление контейнерами.

  3. docker.models.images – управление образами.

  4. docker.models.networks – управление сетями.

  5. docker.models.volumes – управление томами.

  6. docker.api – низкоуровневый API.


1. docker.DockerClient – подключение к Docker

Основной класс для взаимодействия с Docker Engine.

Основные методы

Метод Описание
from_env() Подключение к Docker через переменные окружения.
close() Закрытие соединения.
ping() Проверка доступности Docker.
version() Получение версии Docker.
info() Получение информации о Docker Engine.

Пример

python
 
Copy
 
Download
import docker

client = docker.from_env()
print(client.ping())  # Проверка соединения
print(client.version())  # Версия Docker
client.close()

2. docker.models.containers – управление контейнерами

Класс Container и методы для работы с контейнерами.

Основные методы

Метод Описание
run() Запуск нового контейнера.
list() Получение списка контейнеров.
get() Получение контейнера по ID.
stop() Остановка контейнера.
start() Запуск остановленного контейнера.
restart() Перезапуск контейнера.
remove() Удаление контейнера.
logs() Получение логов контейнера.
exec_run() Выполнение команды в контейнере.
stats() Мониторинг ресурсов контейнера.

Пример

python
 
Copy
 
Download
container = client.containers.run(
    "nginx:latest",
    detach=True,
    ports={'80/tcp': 8080}
)
print(container.id)

# Получение логов
print(container.logs())

# Остановка и удаление
container.stop()
container.remove()

3. docker.models.images – управление образами

Класс Image и методы для работы с Docker-образами.

Основные методы

Метод Описание
pull() Загрузка образа из реестра.
list() Получение списка образов.
get() Получение образа по ID.
remove() Удаление образа.
tag() Добавление тега к образу.
push() Отправка образа в реестр.
build() Сборка образа из Dockerfile.

Пример

python
 
Copy
 
Download
# Загрузка образа
image = client.images.pull("nginx:latest")

# Сборка образа
image = client.images.build(
    path=".",  # Путь к Dockerfile
    tag="myapp:latest"
)

# Удаление образа
client.images.remove("nginx:latest")

4. docker.models.networks – управление сетями

Класс Network и методы для работы с Docker-сетями.

Основные методы

Метод Описание
create() Создание сети.
list() Получение списка сетей.
get() Получение сети по ID.
remove() Удаление сети.
connect() Подключение контейнера к сети.
disconnect() Отключение контейнера от сети.

Пример

python
 
Copy
 
Download
network = client.networks.create("mynetwork", driver="bridge")
print(network.id)

# Подключение контейнера
network.connect(container.id)

# Удаление сети
network.remove()

5. docker.models.volumes – управление томами

Класс Volume и методы для работы с Docker-томами.

Основные методы

Метод Описание
create() Создание тома.
list() Получение списка томов.
get() Получение тома по ID.
remove() Удаление тома.

Пример

python
 
Copy
 
Download
volume = client.volumes.create(name="mydata")
print(volume.id)

# Удаление тома
volume.remove()

6. docker.api – низкоуровневый API

Прямой доступ к Docker API (аналогично docker engine API).

Основные модули

Модуль Описание
docker.api.container API контейнеров.
docker.api.image API образов.
docker.api.network API сетей.
docker.api.volume API томов.

Пример

python
 
Copy
 
Download
from docker import APIClient

low_level_client = APIClient(base_url='unix://var/run/docker.sock')
container_id = low_level_client.create_container("nginx:latest")["Id"]
low_level_client.start(container_id)

7. Дополнительные функции

1. docker.types – вспомогательные классы

python
 
Copy
 
Download
from docker.types import Mount, Ulimit

mount = Mount(target="/data", source="mydata", type="volume")
ulimit = Ulimit(name='nofile', soft=100, hard=200)

client.containers.run(
    "nginx",
    mounts=[mount],
    ulimits=[ulimit]
)

2. docker.errors – обработка ошибок

python
 
Copy
 
Download
from docker.errors import DockerException, ImageNotFound

try:
    client.images.get("nonexistent-image")
except ImageNotFound:
    print("Образ не найден!")

3. docker.auth – аутентификация в реестре

python
 
Copy
 
Download
from docker.auth import load_config

auth_config = load_config()
client.images.push("myrepo/myimage", auth_config=auth_config)

Пример: сборка, запуск и мониторинг контейнера

python
 
Copy
 
Download
import docker

client = docker.from_env()

# Сборка образа
image, logs = client.images.build(path=".", tag="myapp")

# Запуск контейнера
container = client.containers.run(
    "myapp",
    detach=True,
    ports={'5000/tcp': 5000}
)

# Мониторинг ресурсов
stats = container.stats(stream=False)
print(stats["memory_stats"]["usage"])

# Остановка и удаление
container.stop()
container.remove()
client.close()

Заключение

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