Введение
Управление мышью — важный аспект автоматизации взаимодействия с интерфейсом пользователя. Во многих задачах, будь то автотесты, скрипты, игровые боты или утилиты автоматизации, требуется программное перемещение указателя, симуляция кликов и перехват действий пользователя. В Python для этого отлично подходит библиотека mouse.
Библиотека mouse
предоставляет простой и прямолинейный API для работы с мышью: отслеживание событий, выполнение кликов, запись и воспроизведение движений. Она подходит для кроссплатформенной разработки (с ограничениями), проста в установке и используется как в изолированных скриптах, так и в сложных проектах RPA.
В статье рассмотрим все методы, примеры, ограничения, интеграции и реальные кейсы использования mouse
.
Основная часть
Установка
pip install mouse
На Linux и macOS может потребоваться запуск от имени администратора или предоставление разрешений на управление вводом.
Обзор возможностей
mouse
работает как на стороне захвата пользовательских действий (listener), так и в качестве эмулятора движений и кликов (controller).
Основные возможности:
-
Отслеживание нажатий и отпусканий кнопок
-
Определение позиции курсора
-
Программные клики и прокрутка
-
Перемещение курсора
-
Горячие клавиши мыши
-
Запись и воспроизведение макросов
Эмуляция действий мыши
mouse.move(x, y, absolute=True, duration=0)
Перемещение курсора. Параметр absolute=False
включает относительный режим.
mouse.click(button='left')
Симулирует клик указанной кнопкой.
import mouse
mouse.click('left')
mouse.click('right')
mouse.double_click()
/ mouse.right_click()
/ mouse.middle_click()
Шорткаты для стандартных действий.
mouse.press()
/ mouse.release()
Нажатие и отпускание кнопки мыши.
mouse.press('left')
mouse.release('left')
mouse.wheel(delta)
Симулирует скроллинг.
mouse.wheel(-1) # Прокрутка вниз
Получение координат
mouse.get_position()
Возвращает текущие координаты курсора.
x, y = mouse.get_position()
mouse.is_pressed(button)
Проверяет, нажата ли кнопка в момент запроса.
Слушатели событий
mouse.on_button(callback, buttons=('left', 'right', 'middle'), types=('down', 'up'))
Обработка событий клика и отпускания.
def handler(event):
print(event)
mouse.on_button(handler)
mouse.on_click(callback)
/ mouse.on_double_click(callback)
Реагирование на одиночный и двойной клик.
mouse.hook(callback)
Глобальный обработчик всех событий мыши.
mouse.hook(lambda e: print(e.event_type, e.button, e.time))
mouse.unhook(callback)
/ mouse.unhook_all()
Удаление обработчиков.
Работа с макросами
mouse.record(button='right')
Записывает действия до повторного нажатия указанной кнопки.
events = mouse.record(button='right')
mouse.play(events, speed_factor=1)
Воспроизводит записанные события. speed_factor
регулирует скорость.
Ожидание событий
mouse.wait(button='left')
Блокирует выполнение до следующего клика.
print("Жду клика...")
mouse.wait('left')
Безопасность и контроль
-
Поддержка прерывания по
KeyboardInterrupt
-
Возможность логгирования действий
-
Поддержка многопоточности при сложных сценариях
Примеры использования
Автотест интерфейса
Проверка, срабатывают ли элементы при нажатии, движение курсора по кнопкам, логгирование кликов.
Игровые макросы
Автоклики, скрипты движения мыши, реакции на события и макросы в реальном времени.
GUI-боты
Открытие окон, взаимодействие с программами без API, автоматизация повседневных задач.
Анализ активности
Запись движений пользователя для UX-аналитики или обучения моделей поведения.
Интеграции и расширения
-
keyboard
— для обработки клавиатуры -
pyautogui
— для управления экраном и скриншотами -
threading
— фоновое выполнение задач -
pynput
— более универсальная, но менее производительная альтернатива
Сравнение с альтернативами
Библиотека | Язык | Управление мышью | Поддержка событий | Макросы |
---|---|---|---|---|
mouse | Python | Да | Да | Да |
pynput | Python | Да | Да | Нет |
PyAutoGUI | Python | Да | Нет | Частично |
AutoHotKey | Спец. DSL | Да | Да | Да |
Основные функции библиотеки mouse
mouse.move(x, y, absolute=True, duration=0)
Перемещает курсор мыши.
-
x
,y
: координаты (в пикселях). -
absolute
: еслиTrue
, координаты абсолютные. ЕслиFalse
— смещение относительно текущей позиции. -
duration
: время движения в секундах.
Пример:
mouse.get_position()
Возвращает текущие координаты курсора как кортеж (x, y)
.
Пример:
mouse.click(button='left', coords=(None, None))
Кликает мышью.
-
button
:'left'
,'right'
,'middle'
,'x'
,'x2'
. -
coords
: можно указать координаты, куда кликнуть.
Пример:
mouse.double_click(button='left')
Двойной клик.
Пример:
mouse.right_click()
Правый клик.
Пример:
mouse.left_click()
Левый клик.
Пример:
mouse.middle_click()
Клик средней кнопкой.
Пример:
mouse.press(button='left')
Нажимает и удерживает кнопку мыши.
Пример:
mouse.release(button='left')
Отпускает кнопку мыши.
Пример:
mouse.wheel(delta=1)
Эмулирует прокрутку колесика.
-
delta
: положительное значение — вверх, отрицательное — вниз.
Пример:
mouse.is_pressed(button='left')
Проверяет, нажата ли в данный момент кнопка.
Пример:
mouse.on_button(callback, buttons=('left', 'right', 'middle'), types=('down', 'up'))
Назначает обработчик событий нажатия/отпускания кнопки.
-
callback
: функция, которая вызывается при событии. -
buttons
: список кнопок. -
types
:'down'
и/или'up'
.
Пример:
mouse.on_click(callback)
Обработчик любого клика.
Пример:
mouse.on_double_click(callback)
Обработчик двойного клика.
Пример:
mouse.on_right_click(callback)
Обработчик правого клика.
Пример:
mouse.on_middle_click(callback)
Обработчик клика средней кнопкой.
mouse.on_wheel(callback)
Обработчик события прокрутки колесика.
Пример:
mouse.wait(button='left', target_types=('down',))
Блокирует выполнение, пока не произойдёт указанное событие.
Пример:
mouse.record(button='right')
Записывает события мыши до нажатия button
.
Возвращает список событий MouseEvent
.
Пример:
mouse.play(events, speed_factor=1.0)
Воспроизводит список событий, например, из mouse.record
.
Пример:
mouse.unhook(callback)
Удаляет конкретный обработчик.
mouse.unhook_all()
Удаляет все установленные хуки (обработчики).
mouse.hook(callback)
Регистрирует глобальный обработчик всех событий мыши (движение, клик, прокрутка и т.д.).
Пример:
mouse.clear_all_hotkeys()
Удаляет все горячие клавиши (если заданы через keyboard
, с которым mouse
интегрируется).
Примечания
-
Некоторые функции требуют администраторских прав, особенно на Windows.
-
На Linux может потребоваться
xlib
илиevdev
. -
На macOS нужно предоставить доступ в
Security & Privacy > Accessibility
.
Заключение
Библиотека mouse
— мощный и простой инструмент для программного управления мышью и обработки её событий. Благодаря минималистичному API, поддержке макросов и кроссплатформенности, она подходит как для новичков, так и для продвинутых разработчиков в сфере автоматизации, RPA и тестирования.