Как я могу управлять клавиатурой и мышью с помощью Python? - PullRequest
11 голосов
/ 22 декабря 2009

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

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

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

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

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

Ответы [ 8 ]

6 голосов
/ 22 декабря 2009

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

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

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

dogtail.rawinput.click(100, 100)
2 голосов
/ 16 ноября 2015

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

Например:

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

Посетите страницу Введение .

2 голосов
/ 16 августа 2011

Это полностью работает ... по крайней мере на 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
1 голос
/ 23 декабря 2009

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

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

1 голос
/ 22 декабря 2009

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

ВСЕ это решение кроссплатформенное и работает практически везде.

1 голос
/ 22 декабря 2009

для мыши, я нашел pymouse , который, кажется, работает (я не пробовал полностью, требуется небольшой взлом для клика, см. Проблемы)

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

здесь - пример, работающий только с гномом (пока недостаточно хорошо)

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

1 голос
/ 22 декабря 2009

Вот интересная тема от форума Python для вас: Python Forum

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

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

0 голосов
/ 05 мая 2015

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

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

...