desarrollo-web-br-bd.com

Controlando el mouse con Python

¿Cómo se controla el cursor del mouse en Python, es decir, moverlo a cierta posición y hacer clic en Windows?

175
Sasha

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)
292
Jeffrey Kemp

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.

99
Al Sweigart

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
71
Anurag Uniyal

Echa un vistazo a la plataforma cruzada PyMouse: https://github.com/pepijndevos/PyMouse/

21
Fabio Varesano

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)
20
Gwen

Linux

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) .

13
Simon

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.
7
TankorSmash

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)
7
Pro Q