Wie steuert man den Mauszeiger in Python, dh bewegt man ihn an eine bestimmte Position und klickt unter Windows?
Wie steuert man den Mauszeiger in Python, dh bewegt man ihn an eine bestimmte Position und klickt unter Windows?
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):
import win32api, win32con
def click(x,y):
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
click(10,10)
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.
python3.x
Werken getestet , können Sie die Antwort
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.
Sie können win32 apis verwenden win32api
oder ctypes
modulieren, 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
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):
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:
import autopy
autopy.mouse.smooth_move(200,200)
Schauen Sie sich die plattformübergreifende PyMouse an: https://github.com/pepijndevos/PyMouse/
tap space
und tap 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.
from Xlib import X, display
d = display.Display()
s = d.screen()
root = s.root
root.warp_pointer(300,300)
d.sync()
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,
from pynput.mouse import Button, Controller
mouse = Controller()
# Read pointer position
print('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)
Schnelle und schmutzige Funktion, die unter clicks
Windows 7 überall mit der ctypes
Bibliothek 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.
Ab 2020 können Sie die Maus verwenden :
import mouse
mouse.move("500", "500")
mouse.left_click()
Eigenschaften
Wenn Sie die Maus bewegen möchten, verwenden Sie Folgendes:
import pyautogui
pyautogui.moveTo(x,y)
Wenn Sie klicken möchten, verwenden Sie Folgendes:
import pyautogui
pyautogui.click(x,y)
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 verwenden python3 -m pip install pyautogui
.
pyautogui.moveTo(x, y)
da move()
sich der Cursor relativ zur aktuellen Position bewegt.
moveTo()
bewegt sich zu einer absoluten Position, während move()
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:
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')
Hier ist die Quelle: So steuern Sie Ihre Maus in Python
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
import win32api, win32con
def click(x,y):
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
click(10,10)
sehr einfach 1- Paket installieren:
pip install mouse
2- Bibliothek zum Projekt hinzufügen:
import mouse
3- Verwenden Sie es zum Beispiel:
mouse.right_click()
Beschreiben Sie in dieser URL alle Funktionen, die Sie verwenden können: