keyboard
Take full control of your keyboard with this small Python library. Hook global events, register hotkeys, simulate key presses and much more.
Features
- Global event hook on all keyboards (captures keys regardless of focus).
- Listen and send keyboard events.
- Works with Windows and Linux (requires sudo), with experimental OS X support (thanks @glitchassassin!).
- Pure Python, no C modules to be compiled.
- Zero dependencies. Trivial to install and deploy, just copy the files.
- Python 2 and 3.
- Complex hotkey support (e.g. ctrl+shift+m, ctrl+space ) with controllable timeout.
- Includes high level API (e.g. record and play, add_abbreviation).
- Maps keys as they actually are in your layout, with full internationalization support (e.g. Ctrl+ç ).
- Events automatically captured in separate thread, doesn’t block main program.
- Tested and documented.
- Doesn’t break accented dead keys (I’m looking at you, pyHook).
- Mouse support available via project mouse ( pip install mouse ).
Usage
or clone the repository (no installation required, source files are sufficient):
git clone https://github.com/boppreh/keyboard
or download and extract the zip into your project folder.
Then check the API docs below to see what features are available.
Example
- Events generated under Windows don’t report device id ( event.device == None ). #21
- Media keys on Linux may appear nameless (scan-code only) or not at all. #20
- Key suppression/blocking only available on Windows. #22
- To avoid depending on X, the Linux parts reads raw device files ( /dev/input/input* ) but this requires root.
- Other applications, such as some games, may register hooks that swallow all key events. In this case keyboard will be unable to report events.
- This program makes no attempt to hide itself, so don’t use it for keyloggers or online gaming bots. Be responsible.
Работа бота: как симулировать нажатия клавиш в Python
Сегодня день рождения у Гвидо ван Россума, создателя Python. Поздравляем! Самое время поговорить о его детище и затронуть животрепещущую тему: как в Питоне имитировать нажатия клавиш при создании ботов. Суть бота — автоматическое выполнение действий, на которые не хочет тратить время человек. У программистов Python есть инструменты, позволяющие имитировать события клавиатуры и реагировать на них. Подборку таких инструментов вы и найдете ниже.
Зачем и кому это нужно
Поводы симулировать нажатие клавиш:
- автоматизация — создание ботов для сайтов, приложений и игр. Пример: бот для автоматического заполнения форм или кормления/лечения игровых персонажей;
- тестирование десктопных приложений — перебор возможных действий пользователя и реакций программы;
- доступность — адаптация интерфейса для людей с ограниченными возможностями здоровья, в том числе за счёт эмуляции мыши (ведь без зрения ею не воспользуешься);
- оптимизация — переназначение стандартных клавиш и/или замена недостающих кнопок физической клавиатуры.
Инструменты питониста для разных платформ
Для симуляции событий клавиатуры и мыши есть кроссплатформенный модуль PyUserInput , который работает поверх библиотек и фрейморков:
Для 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. Всё это пригодится начинающему разработчику не только для создания ботов, но и в разработке собственных программных продуктов.