Блог

Работа бота: как симулировать нажатия клавиш в Python

О Py-библиотеках, которые помогают создавать ботов для игр, сайтов и приложений.
31 января 20182 минуты7527

Сегодня день рождения у Гвидо ван Россума, создателя 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. Всё это пригодится начинающему разработчику не только для создания ботов, но и в разработке собственных программных продуктов.

python_developerклавиатура
Нашли ошибку в тексте? Напишите нам.
Спасибо,
что читаете наш блог!
Posts popup