¿Cómo se controla el cursor del mouse en Python, es decir, moverlo a cierta posición y hacer clic en Windows?
Probado en WinXP, Python 2.6 (3.x también se probó) después de instalar pywin32 (pywin32-214.win32-py2.6.exe en mi 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)
Pruebe con el módulo PyAutoGUI . Es multiplataforma.
pip install pyautogui
Y entonces:
import pyautogui
pyautogui.click(100, 100)
También tiene otras características:
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
Esto es mucho más fácil que pasar por todas las cosas de win32con.
Puede usar el módulo win32api
o ctypes
para usar las apis de win32 para controlar el mouse o cualquier gui
Aquí hay un ejemplo divertido para controlar el 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 click utilizando 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
Echa un vistazo a la plataforma cruzada PyMouse: https://github.com/pepijndevos/PyMouse/
Otra opción es usar el paquete multiplataforma AutoPy . Este paquete tiene dos opciones diferentes para mover el mouse:
Este fragmento de código moverá instantáneamente el cursor a la posición (200,200):
import autopy
autopy.mouse.move(200,200)
Si, en cambio, desea que el cursor se mueva visiblemente a través de la pantalla a una ubicación determinada, puede usar el comando smooth_move:
import autopy
autopy.mouse.smooth_move(200,200)
from Xlib import X, display
d = display.Display()
s = d.screen()
root = s.root
root.warp_pointer(300,300)
d.sync()
Fuente: El mouse de Python se mueve en 5 líneas de código (solo Linux) .
Función rápida y sucia que hará clic izquierdo en cualquier clicks
veces en Windows 7 usando la biblioteca ctypes
. No se requieren descargas.
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.
Pynput es la mejor solución que he encontrado, tanto para Windows como para Mac. Súper fácil de programar, y funciona muy bien.
Por ejemplo,
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)