如何在Python中控制鼠标和键盘?
这个想法与Java中的Robot() class一样。能够说:将鼠标从这里移到这里,点击那里,写下屏幕上的任何内容。
对于Windows,有win32api,但我主要使用的是Linux。
对于Linux,有Xlib但是它也适用于键盘吗? (仅发现对鼠标的引用)
是否有跨平台解决方案? (Linux,Windows甚至OS X都会很棒。)
答案 0 :(得分:6)
我使用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)
答案 1 :(得分: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
答案 2 :(得分:2)
我可以建议你PyAutoGUI,它可以完全控制鼠标和键盘并获得截图,甚至可以在屏幕上找到图像(例如:按钮在哪里?),对于动态自动化点击非常有用。它适用于Windows,macOS和Linux。
例如:
>>> import pyautogui
>>> screenWidth, screenHeight = pyautogui.size()
>>> pyautogui.moveTo(screenWidth / 2, screenHeight / 2)
答案 3 :(得分:1)
以下是来自Python论坛的一个非常有用的线程: Python Forum
编辑: 关于鼠标控制的stackoverflow也有一个令人兴奋的问题......也许这是一个很好的起点.. Mouse Control with Python
其中一个答案是引用一个Linux示例......它将引导您访问一个不错的博客文章。
答案 4 :(得分:1)
对于鼠标,我发现pymouse似乎有效(我还没有完全尝试过,点击需要一个小黑客,比较问题)
对于键盘,我不确定Xlib是否可以完成这项工作。我仍然在寻找如何写一些东西,但你可以使用Xlib(但我不知道C)按照here或C here解释关键事件。
here只是一个关于gnome的例子(还不够好)
在pymouse,他们有一个很好的方式让它在3个不同的平台上工作,但需要制作3个代码......
答案 5 :(得分:1)
对于控制台尝试ncurses或俚语。在其他情况下尝试PyQt,PyGtk,TkInter。
所有这个解决方案都是跨平台的,几乎可以在任何地方工作。
答案 6 :(得分:1)
对于Linux有Xlib,但是它也适用于键盘吗? (仅发现对鼠标的引用)
是的,它也适用于键盘。
答案 7 :(得分:0)
Linux,windows和mac上的跨平台解决方案是autopy。 https://github.com/msanders/autopy/
它允许控制鼠标和键盘,截取屏幕截图,并在较大的位图上查找小位图,如果你想自动化一些你无法控制的gui应用程序,它应该非常方便。