Come si controlla il cursore del mouse in Python, ovvero spostandolo in una certa posizione e facendo clic, sotto Windows?
Come si controlla il cursore del mouse in Python, ovvero spostandolo in una certa posizione e facendo clic, sotto Windows?
Risposte:
Testato su WinXP, Python 2.6 (3.x anche testato) dopo l'installazione di pywin32 (pywin32-214.win32-py2.6.exe nel mio caso):
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))
è meglio essere sostituito dalla win32api.mouse_event(win32con.MOUSEEVENTF_MOVE | win32con.MOUSEEVENTF_ABSOLUTE, int(x/SCREEN_WIDTH*65535.0), int(y/SCREEN_HEIGHT*65535.0))
mia esperienza per una migliore integrazione con altre applicazioni come i giochi.
python3.x
opere, sentiti libero di modificare la risposta
Prova con il modulo PyAutoGUI . È multipiattaforma.
pip install pyautogui
E così:
import pyautogui
pyautogui.click(100, 100)
Ha anche altre caratteristiche:
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
Questo è molto più semplice che passare attraverso tutte le cose di win32con.
È possibile utilizzare win32api
o il ctypes
modulo per utilizzare le API Win32 per il controllo del mouse o di qualsiasi interfaccia grafica
Ecco un esempio divertente per controllare il mouse usando 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)
Un clic usando i tipi:
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
?
Un'altra opzione è quella di utilizzare il pacchetto AutoPy multipiattaforma . Questo pacchetto ha due diverse opzioni per spostare il mouse:
Questo frammento di codice sposta immediatamente il cursore in posizione (200.200):
import autopy
autopy.mouse.move(200,200)
Se invece desideri che il cursore si sposti visibilmente sullo schermo in una determinata posizione, puoi utilizzare il comando smooth_move:
import autopy
autopy.mouse.smooth_move(200,200)
Dai un'occhiata alla piattaforma multipiattaforma PyMouse: https://github.com/pepijndevos/PyMouse/
tap space
e tap screen shot key
usando PyUswerInput?
PyUserInput
è rotto. Non posso dire se funziona bene o no perché non riesco nemmeno a farlo installare a causa di dipendenze interrotte.
from Xlib import X, display
d = display.Display()
s = d.screen()
root = s.root
root.warp_pointer(300,300)
d.sync()
Fonte: spostamento del mouse Python in 5 righe di codice (solo Linux) .
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();
la chiamata sleep () tra stampa e rilascio può o non può essere richiesta a seconda dell'applicazione di destinazione.
Pynput è la migliore soluzione che ho trovato, sia per Windows che per Mac. Super facile da programmare e funziona molto bene.
Per esempio,
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)
Funzione rapida e sporca che ti farà clic in qualsiasi clicks
momento su Windows 7 usando la ctypes
libreria. Nessun download richiesto.
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.
A partire dal 2020 , puoi usare il mouse :
import mouse
mouse.move("500", "500")
mouse.left_click()
Caratteristiche
Se vuoi spostare il mouse, usa questo:
import pyautogui
pyautogui.moveTo(x,y)
Se vuoi fare clic, usa questo:
import pyautogui
pyautogui.click(x,y)
Se non hai pyautogui
installato, devi avere Python collegato a CMD. Vai a CMD e scrivi:pip install pyautogui
Questo verrà installato pyautogui
per Python 2.x.
Per Python 3.x, probabilmente dovrai usare pip3 install pyautogui
o python3 -m pip install pyautogui
.
pyautogui.moveTo(x, y)
perché move()
sposta il cursore rispetto alla sua posizione corrente.
moveTo()
si sposta in una posizione assoluta, mentre si move()
sposta in relazione alla posizione corrente del cursore.
Un'altra alternativa sarebbe la libreria del mouse , la uso personalmente in quanto è relativamente semplice e multipiattaforma.
Ecco come puoi usarlo:
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')
Ecco la fonte: Come controllare il mouse in Python
La risposta accettata ha funzionato per me, ma era instabile (a volte i clic non venivano registrati), quindi ho aggiunto un MOUSEEVENTF_LEFTUP aggiuntivo . Quindi ha funzionato in modo affidabile
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)
Pacchetto 1-installazione molto semplice:
pip install mouse
2- aggiungi libreria al progetto:
import mouse
3- usalo ad esempio:
mouse.right_click()
in questo url descrivi tutte le funzioni che puoi usare: