Как я могу управлять клавиатурой и мышью с помощью Python?

Как я могу управлять мышью и клавиатурой в Python?

Идея состоит в том, чтобы сделать то же самое, что класс Robot() в Java. Можете сказать: переместите мышь отсюда сюда, нажмите там, напишите, что все, что на экране.

Для Windows есть win32api, но я использую в основном Linux.

Для Linux есть Xlib, но он работает и для клавиатуры? (найдена только ссылка на мышь)

Есть ли кросс-платформенное решение? (Linux, Windows и даже OS X будут отличными.)

Ответы

Ответ 1

для мыши, я нашел pymouse, который, кажется, работает (я еще не пробовал, маленький хак необходимо для щелчка, cf проблем)

для клавиатуры, я не уверен, что Xlib может выполнить эту работу. Я все еще ищу, как писать что-то, но вы можете поймать ключевое событие, как описано здесь или в C здесь с помощью Xlib (но я не знаю C).

здесь является примером, работающим только с gnome (пока недостаточно)

В pymouse у них есть хороший способ заставить его работать на 3 разных платформах, но нужно сделать 3 кода...

Ответ 2

Я использую dogtail (https://fedorahosted.org/dogtail/), чтобы сделать такие вещи, используя это, я создал автоматическое тестирование из моего Linux (ubuntu) приложение. Эта структура нажимает кнопки и типы на текстовые поля.

см. пример gedit, https://fedorahosted.org/dogtail/browser/examples/gedit-test-utf8-procedural-api.py

Так что просто используйте dogtail, например

dogtail.rawinput.click(100, 100)

Ответ 3

Это полностью работает... по крайней мере на Mac. Это для перетаскивания мышью и т.д., Но может быть соответствующим образом модифицировано.

#!/usr/bin/python
import sys
import time
from Quartz.CoreGraphics import * # imports all of the top-level symbols in the module

def mouseEvent(type, posx, posy):
    theEvent = CGEventCreateMouseEvent(None, type, (posx,posy), kCGMouseButtonLeft)
    CGEventPost(kCGHIDEventTap, theEvent)
def mousemove(posx,posy):
    mouseEvent(kCGEventMouseMoved, posx,posy);
def mouseclickdn(posx,posy):
    mouseEvent(kCGEventLeftMouseDown, posx,posy);
def mouseclickup(posx,posy):
    mouseEvent(kCGEventLeftMouseUp, posx,posy);
def mousedrag(posx,posy):
    mouseEvent(kCGEventLeftMouseDragged, posx,posy);

ourEvent = CGEventCreate(None);
currentpos=CGEventGetLocation(ourEvent); # Save current mouse position
mouseclickdn(60, 100);
mousedrag(60, 300);
mouseclickup(60, 300);
time.sleep(1);
mousemove(int(currentpos.x),int(currentpos.y)); # Restore mouse position

Ответ 4

Вот вам интересный поток от Python Forum для вас: Форум Python

Изменить: Был также интересный вопрос о потоке stackoverflow относительно управления мышью... может быть, это хорошая отправная точка. Управление мышью с помощью Python

Один из ответов касается примера Linux... который гласит вас в приятной записи в блоге.

Ответ 5

Для консоли попробуйте ncurses или slang. В другой ситуации попробуйте PyQt, PyGtk, TkInter.

ВСЕ из этого решения являются кросс-платформенными и работают практически в любом месте.

Ответ 6

Для linux есть Xlib, но он работает и для клавиатуры? (найдена только ссылка на мышь)

Да, он работает и для клавиатуры.

Ответ 7

Я могу посоветовать вам PyAutoGUI, он позволяет полностью контролировать мышь и клавиатуру и получать скриншоты, и даже вы можете находить изображения в пределах (например: где кнопка?), очень полезно автоматизировать клики динамически. Он работает для Windows, MacOS и Linux.

Например:

>>> import pyautogui
>>> screenWidth, screenHeight = pyautogui.size()
>>> pyautogui.moveTo(screenWidth / 2, screenHeight / 2)

Ознакомьтесь с страница с информацией.

Ответ 8

Кросс-платформенное решение на Linux, Windows и Mac является автопилотом. https://github.com/msanders/autopy/

Он позволяет управлять мышью и клавиатурой, снимать скриншоты и находить небольшие растровые изображения на больших растровых изображениях и должен быть очень удобным, если вы хотите автоматизировать какое-то приложение gui, на которое вы не контролируете.