Введение
Многие задачи на компьютере можно автоматизировать: клик мыши, ввод текста, поиск кнопки на экране, перемещение окон. Когда речь заходит об автоматизации пользовательского взаимодействия с графическим интерфейсом, в 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
-
docker.DockerClient
– основной клиент для работы с Docker. -
docker.models.containers
– управление контейнерами. -
docker.models.images
– управление образами. -
docker.models.networks
– управление сетями. -
docker.models.volumes
– управление томами. -
docker.api
– низкоуровневый API.
1. docker.DockerClient
– подключение к Docker
Основной класс для взаимодействия с Docker Engine.
Основные методы
Метод | Описание |
---|---|
from_env() |
Подключение к Docker через переменные окружения. |
close() |
Закрытие соединения. |
ping() |
Проверка доступности Docker. |
version() |
Получение версии Docker. |
info() |
Получение информации о Docker Engine. |
Пример
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() |
Мониторинг ресурсов контейнера. |
Пример
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. |
Пример
# Загрузка образа 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() |
Отключение контейнера от сети. |
Пример
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() |
Удаление тома. |
Пример
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 томов. |
Пример
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
– вспомогательные классы
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
– обработка ошибок
from docker.errors import DockerException, ImageNotFound try: client.images.get("nonexistent-image") except ImageNotFound: print("Образ не найден!")
3. docker.auth
– аутентификация в реестре
from docker.auth import load_config auth_config = load_config() client.images.push("myrepo/myimage", auth_config=auth_config)
Пример: сборка, запуск и мониторинг контейнера
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.