Müssen Sie die Mausbewegung im Code ohne Benutzereingriff ausführen?
Rahul
Weitere Informationen wären wirklich hilfreich ...
Gabriel Hurley
Ich wotk in Windows und ich benutze kein Toolkit. Ich bin wirklich neu in Python und habe noch nie mit einer GUI gearbeitet. Wo fange ich an? Welches Handbuch soll ich lesen?
Sasha
2
Warum brauchst du dafür eine Python? Kannst du das selbst? im Ernst, warum Sie es brauchen, was der Zweck ist, ein bisschen mehr Details wären großartig
Anurag Uniyal
2
Nur zu Ihrer Information, wenn Sie dies verwenden, um das Sperren Ihres Computers zu verhindern, könnten Sie gegen die Sicherheitsrichtlinien Ihres Unternehmens oder Ihrer Organisation verstoßen, da dies ein Mittel zur Umgehung der Eigenschaften der automatischen Computersperre ist. Ich habe dies an einigen Stellen problemlos verwendet. Fragen Sie einfach immer bei Ihren Sys-Administratoren nach. Ich habe gesehen, wie Leute wegen kleinerer Dinge wie diesen ihren Job verloren haben.
AlienAnarchist
Antworten:
329
Getestet unter WinXP, Python 2.6 (3.x ebenfalls getestet) nach der Installation von pywin32 (in meinem Fall pywin32-214.win32-py2.6.exe):
win32api.SetCursorPos((x,y))ist win32api.mouse_event(win32con.MOUSEEVENTF_MOVE | win32con.MOUSEEVENTF_ABSOLUTE, int(x/SCREEN_WIDTH*65535.0), int(y/SCREEN_HEIGHT*65535.0))meiner Erfahrung nach besser zu ersetzen, um eine bessere Integration mit anderen Anwendungen wie Spielen zu erreichen.
Kann ich diese Bibliothek verwenden, um die Geschwindigkeit / Beschleunigung der Maus zu steuern?
Jemand Someoneelse
Dies hatte den Vorteil, dass keine Installation (und damit verbundene Überprüfung und Genehmigung durch das Management) von nicht standardmäßigen Python-Modulen in mehr als 50 Windows-Boxen (Digital Signage Kiosks) erforderlich war.
Brichins
4
Auch in python3.xWerken getestet , können Sie die Antwort
jederzeit
132
Versuchen Sie es mit dem PyAutoGUI- Modul. Es ist Multiplattform.
pip install pyautogui
Und so:
import pyautogui
pyautogui.click(100,100)
Es hat auch andere Funktionen:
import pyautogui
pyautogui.moveTo(100,150)
pyautogui.moveRel(0,10)# move mouse 10 pixels down
pyautogui.dragTo(100,150)
pyautogui.dragRel(0,10)# drag mouse 10 pixels down
Dies ist viel einfacher als das ganze win32con-Zeug durchzugehen.
Pyautogui ist ein großartiges Modul, aber leider sehr langsam. In Ubuntu bewegt es den Cursor 2-3 mal pro Sekunde. Unglaublich! Pyuserinput ist 1000x schneller.
Vladyslav Savchenko
1
Wenn Sie versuchen, pyautogui zu installieren, schauen Sie hier auf stackoverflow.com/questions/5892297/… und stellen Sie sudo vor Ihre Befehle, wenn Sie Berechtigungsprobleme haben.
Retodaredevil
5
"PyAutoGUI ist langsam" aufgrund einer Sicherheitsfunktion, die nach jedem Anruf eine Pause von 0,1 Sekunden hinzufügt. Wenn Ihr Skript außer Kontrolle gerät, können Sie die Maus in diesen 0,1 Sekunden in die obere linke Ecke bewegen, um es zu stoppen. Um dies zu deaktivieren, führen Sie pyautogui.PAUSE = 0 aus (obwohl dies nicht empfohlen wird, da Sie das Skript nicht mit der Maus / Tastatur stoppen können.)
Al Sweigart
76
Sie können win32 apis verwenden win32apioder ctypesmodulieren, um die Maus oder eine beliebige GUI zu steuern
Hier ist ein unterhaltsames Beispiel für die Steuerung der Maus mit win32api:
import win32api
import time
import math
for i in range(500):
x = int(500+math.sin(math.pi*i/100)*500)
y = int(500+math.cos(i)*100)
win32api.SetCursorPos((x,y))
time.sleep(.01)
Ein Klick mit ctypes:
import ctypes
# see http://msdn.microsoft.com/en-us/library/ms646260(VS.85).aspx for details
ctypes.windll.user32.SetCursorPos(100,20)
ctypes.windll.user32.mouse_event(2,0,0,0,0)# left down
ctypes.windll.user32.mouse_event(4,0,0,0,0)# left up
Ihr ctypes-Code hat bei mir ohne zusätzliche Bibliotheken funktioniert! (Python 2.6 unter Windows 7)
Intrepion
1
Ohne Verwendung einer externen Bibliothek! Vielen Dank
Akshat Agarwal
2
Danke dir! Ich kann es nicht ertragen, dass es 3 Bibliotheken von Drittanbietern gibt, mit denen Sie dies tun können, aber alle 3 Bibliotheken sind verrückt nach Installation oder Fehlerbehebung. Diese ctypes-Lösung ist die erste native Python-Lösung und funktioniert besser als jede andere, die mir begegnet ist.
DuckPuncher
Wo ist die Dokumentation für SetCursorPos?
ArtOfWarfare
22
Eine weitere Option ist die Verwendung des plattformübergreifenden AutoPy-Pakets . Dieses Paket bietet zwei verschiedene Optionen zum Bewegen der Maus:
Dieses Code-Snippet bewegt den Cursor sofort auf Position (200.200):
import autopy
autopy.mouse.move(200,200)
Wenn Sie stattdessen möchten, dass sich der Cursor sichtbar über den Bildschirm zu einer bestimmten Position bewegt, können Sie den Befehl glatt_move verwenden:
PyMouse wurde durch PyUserInput ersetzt , entspricht genau der Anforderung, ist einfach zu bedienen und plattformübergreifend. Big +1
user336851
@ user336851, wissen Sie, wie tap spaceund tap screen shot keymit PyUswerInput?
user3768495
@ user336851, Zur Zeit PyUserInputist kaputt. Ich kann nicht sagen, ob es gut funktioniert oder nicht, da ich es aufgrund defekter Abhängigkeiten nicht einmal zur Installation bringen kann.
DuckPuncher
20
Linux
fromXlibimport X, display
d = display.Display()
s = d.screen()
root = s.root
root.warp_pointer(300,300)
d.sync()
Ein Google für "Python steuert die Mausbewegung" findet nun diese Seite, wie Meta.
Copas
2
Der Vollständigkeit halber füge ich hinzu, da die Frage auch zur Simulation von Mausklicks gestellt wurde: Xlib.ext.xtest.fake_input(d, X.ButtonPress, 1); d.sync(); time.sleep(0.001); Xlib.ext.xtest.fake_input(d, X.ButtonRelease, 1); d.sync();Der Aufruf von sleep () zwischen Druck und Veröffentlichung kann je nach Zielanwendung erforderlich sein oder auch nicht.
user336851
4
@Copas - Ergebnisse, die in Ihrem Google angezeigt werden, bedeuten nichts. Du bist in einer Blase. Dies zeigt sich in einer DuckDuckGo-Suche nach demselben Begriff - das ist etwas Reales. Das können alle anderen reproduzieren und selbst sehen. Das ist Meta.
ArtOfWarfare
1
Um die Maus in einer VNC-Sitzung zu steuern, benötigen Sie die Anzeigenummer sowie "d = display.Display (': 1')", wobei: 1 die Anzeigenummer ist.
Zafer
12
Pynput ist die beste Lösung, die ich gefunden habe, sowohl für Windows als auch für Mac. Super einfach zu programmieren und funktioniert sehr gut.
Beispielsweise,
from pynput.mouse importButton,Controller
mouse =Controller()# Read pointer positionprint('The current pointer position is {0}'.format(
mouse.position))# Set pointer position
mouse.position =(10,20)print('Now we have moved it to {0}'.format(
mouse.position))# Move pointer relative to current position
mouse.move(5,-5)# Press and release
mouse.press(Button.left)
mouse.release(Button.left)# Double click; this is different from pressing and releasing# twice on Mac OSX
mouse.click(Button.left,2)# Scroll two steps down
mouse.scroll(0,2)
Ich habe gerade versucht, ein altes Programm auf einem Windows-Computer auszuführen, aber es hat nicht funktioniert. Testen Sie es daher vor der Verwendung. Dieses Programm behauptet zumindest, beide zu unterstützen.
Pro Q
Ich habe einige Tests durchgeführt, und es stellte sich heraus, dass mein Problem darin bestand, dass auf einem Mac Gleitkommazahlen als Koordinatenwerte einwandfrei funktionieren. Unter Windows müssen die Koordinaten jedoch Ganzzahlen sein. Dieses Modul ist plattformübergreifend.
Es sieht so aus, als ob das Problem inzwischen behoben wurde.
Pro Q
8
Schnelle und schmutzige Funktion, die unter clicksWindows 7 überall mit der ctypesBibliothek mit der linken Maustaste klickt . Keine Downloads erforderlich.
import ctypes
SetCursorPos= ctypes.windll.user32.SetCursorPos
mouse_event = ctypes.windll.user32.mouse_event
def left_click(x, y, clicks=1):SetCursorPos(x, y)for i in xrange(clicks):
mouse_event(2,0,0,0,0)
mouse_event(4,0,0,0,0)
left_click(200,200)#left clicks at 200, 200 on your screen. Was able to send 10k clicks instantly.
Sie möchten anrufen, pyautogui.moveTo(x, y)da move()sich der Cursor relativ zur aktuellen Position bewegt.
Al Sweigart
Ah, tut mir leid, dass ich Ihren ursprünglichen Kommentar falsch verstanden habe. Ja, beide Funktionen funktionieren. moveTo()bewegt sich zu einer absoluten Position, während move()relativ zur aktuellen Cursorposition verschoben wird.
Al Sweigart
1
Eine andere Alternative wäre die Mausbibliothek , die ich persönlich benutze, da sie relativ einfach und plattformübergreifend ist.
So können Sie es verwenden:
import mouse
# move 100 right and 100 down with a duration of 0.5 seconds
mouse.move(100,100, absolute=False, duration=0.5)# left click
mouse.click('left')# right click
mouse.click('right')
Die akzeptierte Antwort funktionierte für mich, war aber instabil (manchmal wurden Klicks nicht registriert), sodass ich ein zusätzliches MOUSEEVENTF_LEFTUP hinzufügte . Dann funktionierte es zuverlässig
Antworten:
Getestet unter WinXP, Python 2.6 (3.x ebenfalls getestet) nach der Installation von pywin32 (in meinem Fall pywin32-214.win32-py2.6.exe):
quelle
win32api.SetCursorPos((x,y))
istwin32api.mouse_event(win32con.MOUSEEVENTF_MOVE | win32con.MOUSEEVENTF_ABSOLUTE, int(x/SCREEN_WIDTH*65535.0), int(y/SCREEN_HEIGHT*65535.0))
meiner Erfahrung nach besser zu ersetzen, um eine bessere Integration mit anderen Anwendungen wie Spielen zu erreichen.python3.x
Werken getestet , können Sie die AntwortVersuchen Sie es mit dem PyAutoGUI- Modul. Es ist Multiplattform.
Und so:
Es hat auch andere Funktionen:
Dies ist viel einfacher als das ganze win32con-Zeug durchzugehen.
quelle
Sie können win32 apis verwenden
win32api
oderctypes
modulieren, um die Maus oder eine beliebige GUI zu steuernHier ist ein unterhaltsames Beispiel für die Steuerung der Maus mit win32api:
Ein Klick mit ctypes:
quelle
SetCursorPos
?Eine weitere Option ist die Verwendung des plattformübergreifenden AutoPy-Pakets . Dieses Paket bietet zwei verschiedene Optionen zum Bewegen der Maus:
Dieses Code-Snippet bewegt den Cursor sofort auf Position (200.200):
Wenn Sie stattdessen möchten, dass sich der Cursor sichtbar über den Bildschirm zu einer bestimmten Position bewegt, können Sie den Befehl glatt_move verwenden:
quelle
Schauen Sie sich die plattformübergreifende PyMouse an: https://github.com/pepijndevos/PyMouse/
quelle
tap space
undtap screen shot key
mit PyUswerInput?PyUserInput
ist kaputt. Ich kann nicht sagen, ob es gut funktioniert oder nicht, da ich es aufgrund defekter Abhängigkeiten nicht einmal zur Installation bringen kann.Linux
Quelle: Python-Mausbewegung in 5 Codezeilen (nur Linux) .
quelle
Xlib.ext.xtest.fake_input(d, X.ButtonPress, 1); d.sync(); time.sleep(0.001); Xlib.ext.xtest.fake_input(d, X.ButtonRelease, 1); d.sync();
Der Aufruf von sleep () zwischen Druck und Veröffentlichung kann je nach Zielanwendung erforderlich sein oder auch nicht.Pynput ist die beste Lösung, die ich gefunden habe, sowohl für Windows als auch für Mac. Super einfach zu programmieren und funktioniert sehr gut.
Beispielsweise,
quelle
Schnelle und schmutzige Funktion, die unter
clicks
Windows 7 überall mit derctypes
Bibliothek mit der linken Maustaste klickt . Keine Downloads erforderlich.quelle
Ab 2020 können Sie die Maus verwenden :
Eigenschaften
quelle
Wenn Sie die Maus bewegen möchten, verwenden Sie Folgendes:
Wenn Sie klicken möchten, verwenden Sie Folgendes:
Wenn Sie nicht
pyautogui
installiert haben, muss Python an CMD angehängt sein. Gehen Sie zu CMD und schreiben Sie:pip install pyautogui
Dies wird
pyautogui
für Python 2.x installiert .Für Python 3.x müssen Sie wahrscheinlich
pip3 install pyautogui
oder verwendenpython3 -m pip install pyautogui
.quelle
pyautogui.moveTo(x, y)
damove()
sich der Cursor relativ zur aktuellen Position bewegt.moveTo()
bewegt sich zu einer absoluten Position, währendmove()
relativ zur aktuellen Cursorposition verschoben wird.Eine andere Alternative wäre die Mausbibliothek , die ich persönlich benutze, da sie relativ einfach und plattformübergreifend ist.
So können Sie es verwenden:
Hier ist die Quelle: So steuern Sie Ihre Maus in Python
quelle
Die akzeptierte Antwort funktionierte für mich, war aber instabil (manchmal wurden Klicks nicht registriert), sodass ich ein zusätzliches MOUSEEVENTF_LEFTUP hinzufügte . Dann funktionierte es zuverlässig
quelle
sehr einfach 1- Paket installieren:
2- Bibliothek zum Projekt hinzufügen:
3- Verwenden Sie es zum Beispiel:
Beschreiben Sie in dieser URL alle Funktionen, die Sie verwenden können:
https://github.com/boppreh/mouse
quelle