Работа бота: как симулировать нажатия клавиш в Python
Сегодня день рождения у Гвидо ван Россума, создателя Python. Поздравляем! Самое время поговорить о его детище и затронуть животрепещущую тему: как в Питоне имитировать нажатия клавиш при создании ботов. Суть бота — автоматическое выполнение действий, на которые не хочет тратить время человек. У программистов Python есть инструменты, позволяющие имитировать события клавиатуры и реагировать на них. Подборку таких инструментов вы и найдете ниже.
Зачем и кому это нужно
Поводы симулировать нажатие клавиш:
-
автоматизация — создание ботов для сайтов, приложений и игр. Пример: бот для автоматического заполнения форм или кормления/лечения игровых персонажей;
-
тестирование десктопных приложений — перебор возможных действий пользователя и реакций программы;
-
доступность — адаптация интерфейса для людей с ограниченными возможностями здоровья, в том числе за счёт эмуляции мыши (ведь без зрения ею не воспользуешься);
-
оптимизация — переназначение стандартных клавиш и/или замена недостающих кнопок физической клавиатуры.
Инструменты питониста для разных платформ
Для симуляции событий клавиатуры и мыши есть кроссплатформенный модуль PyUserInput, который работает поверх библиотек и фрейморков:
-
Xlib — в Linux,
-
Quartz и AppKit — на Mac,
-
pywin32, pyHook — в Windows.
Для Windows также стоит отметить:
pyautoit — это Python API к средству автоматизации AutoIt;
pywinauto — набор модулей, который автоматизирует взаимодействие с Microsoft Windows GUI. Библиотека написана на чистом Python — простейшие её функции по обработке событий мыши и клавиатуры работают и в Linux. Но более сложные возможности для работы с текстом заточены именно под Windows и доступны только там.
Актуальные версии этих инструментов поддерживают Python 3, более ранние — Python 2.
Как это работает: примеры
В директории examples каталога pywinauto на GitHub собраны два десятка наглядных примеров по использованию библиотеки. С их помощью вы можете прямо сейчас создавать ботов, которые умеют устанавливать/удалять программы, скачивать web-страницы, перетаскивать файлы между окнами, пакетно обрабатывать изображения в MS Paint и решать другие задачи.
Новички оценят читаемость кода:
from pywinauto.application import Application
# Запускаем целевое приложение - обычный блокнот
app = Application().start("notepad.exe")
# Выбираем пункт меню
app.UntitledNotepad.menu_select("Help->About Notepad")
# Симулируем клик
app.AboutNotepad.OK.click()
# Вводим текст
app.UntitledNotepad.Edit.type_keys("Заработало!", with_spaces = True)
Хорошо? Представьте, что вам нужно перенастроить приложение из дефолтного состояния на N-ном количестве компьютеров — выбрать нужные пункты меню, заполнить нужные поля. Или вы тестируете свою программу вдоль и поперёк, чтобы выявить сбои при обращении к GUI. Скрипт, который вам потребуется, будет длиннее, чем в примере выше, но по сути усложнится незначительно.
Добавьте сюда возможность работать с любыми приложениями на Win32 GUI и виджетами под интерфейс MS UI Automation.
Устанавливается pywinauto как обычный пакет — через pip install — и автоматически ставит еще несколько полезных компонентов: библиотеку pyWin32, COM-клиент и серверный фрейморк comtypes, библиотеку six, которая обеспечивает совместимость Python 2 (начиная с 2.6) и 3. Всё это пригодится начинающему разработчику не только для создания ботов, но и в разработке собственных программных продуктов.