11

如何在 Python 中控制鼠标和键盘?

这个想法是与Java中的Robot() 类做同样的事情。可以说:将鼠标从这里移到这里,单击那里,写下屏幕上的任何内容。

对于 Windows,有 win32api,但我主要使用 Linux。

对于 Linux,有 Xlib,但它也适用于键盘吗?(发现只参考鼠标)

有没有跨平台的解决方案?(Linux、Windows 甚至 OS X 都会很棒。)

4

8 回答 8

6

我使用 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)
于 2009-12-22T14:54:46.530 回答
3

我可以建议您PyAutoGUI,它允许完全控制鼠标和键盘并获取屏幕截图,甚至您可以在屏幕内定位图像(例如:按钮在哪里?),对于动态自动点击非常有用。它适用于 Windows、macOS 和 Linux。

例如:

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

查看介绍页面

于 2015-11-16T08:07:42.033 回答
2

这完全有效……至少在 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
于 2011-08-16T02:14:21.113 回答
1

对于控制台尝试 ncurses 或俚语。在其他情况下尝试 PyQt、PyGtk、TkInter。

所有这些解决方案都是跨平台的,几乎可以在任何地方工作。

于 2009-12-22T14:17:34.400 回答
1

这是来自 Python 论坛的一个有趣的主题: Python 论坛

编辑:关于鼠标控制的stackoverflow上还有一个有趣的问题......也许这是一个很好的起点...... 用Python控制鼠标

答案之一是参考一个 Linux 示例……它引导您访问一个不错的博客条目。

于 2009-12-22T12:58:48.650 回答
1

对于 linux,有 Xlib,但它也适用于键盘吗?(发现只参考鼠标)

是的,它也适用于键盘。

于 2009-12-23T15:33:11.780 回答
1

对于鼠标,我发现pymouse似乎可以工作(我还没有完全尝试过,点击需要一个小技巧,参见问题)

对于键盘,我不确定 Xlib 能不能胜任。我仍在研究如何编写一些东西,但您可以使用 Xlib(但我不知道 C)捕获关键事件,如此或 C中所解释的。

是一个仅在 gnome 上工作的示例(还不够好)

在 pymouse 中,他们有一个很好的方法让它在 3 个不同的平台上工作,但需要制作 3 个代码......

于 2009-12-22T13:26:31.760 回答
0

linux、windows 和 mac 上的跨平台解决方案是 autopy。 https://github.com/msanders/autopy/

它允许控制鼠标和键盘,截取屏幕截图,并在较大的位图上查找小位图,如果您想自动化一些您无法控制的 gui 应用程序,应该非常方便。

于 2015-05-05T20:53:04.527 回答