¿Cómo se controla el cursor del mouse en Python, es decir, moverlo a cierta posición y hacer clic en Windows?
¿Cómo se controla el cursor del mouse en Python, es decir, moverlo a cierta posición y hacer clic en Windows?
Respuestas:
Probado en WinXP, Python 2.6 (3.x también probado) 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)
win32api.SetCursorPos((x,y))win32api.mouse_event(win32con.MOUSEEVENTF_MOVE | win32con.MOUSEEVENTF_ABSOLUTE, int(x/SCREEN_WIDTH*65535.0), int(y/SCREEN_HEIGHT*65535.0))En mi experiencia, es mejor reemplazarlo para una mejor integración con otras aplicaciones como los juegos.
python3.xlas obras también, no dude en corregir la respuesta
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.
Puedes usar win32apioctypes módulo para usar win32 apis para controlar el mouse o cualquier interfaz gráfica de usuario
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 clic usando 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?
Otra opción es usar el paquete AutoPy multiplataforma . 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 por la pantalla a una ubicación determinada, puede usar el comando smooth_move:
import autopy
autopy.mouse.smooth_move(200,200)
Echa un vistazo a la plataforma cruzada PyMouse: https://github.com/pepijndevos/PyMouse/
tap spacey tap screen shot keymediante PyUswerInput?
PyUserInputestá roto. No puedo decir si funciona bien o no porque ni siquiera puedo hacer que se instale debido a dependencias rotas.
from Xlib import X, display
d = display.Display()
s = d.screen()
root = s.root
root.warp_pointer(300,300)
d.sync()
Fuente: movimiento del mouse Python en 5 líneas de código (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 llamada sleep () entre la prensa y la liberación puede o no ser requerida dependiendo de la aplicación de destino.
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)
Función rápida y sucia que hará clic izquierdo en cualquier clicksmomento en Windows 7 usando la ctypesbiblioteca. 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.
A partir de 2020 , puede usar el mouse :
import mouse
mouse.move("500", "500")
mouse.left_click()
Caracteristicas
Si desea mover el mouse, use esto:
import pyautogui
pyautogui.moveTo(x,y)
Si desea hacer clic, use esto:
import pyautogui
pyautogui.click(x,y)
Si no lo ha pyautoguiinstalado, debe tener Python conectado a CMD. Vaya a CMD y escriba:pip install pyautogui
Esto se instalará pyautoguipara Python 2.x.
Para Python 3.x, probablemente tendrá que usar pip3 install pyautoguio python3 -m pip install pyautogui.
pyautogui.moveTo(x, y)porque move()mueve el cursor en relación con su posición actual.
moveTo()se mueve a una ubicación absoluta, mientras que se move()mueve en relación con la ubicación actual del cursor.
Otra alternativa sería la biblioteca de mouse , personalmente la uso, ya que es relativamente simple y multiplataforma.
Así es como puedes 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')
Aquí está la fuente: Cómo controlar su mouse en Python
La respuesta aceptada funcionó para mí, pero era inestable (a veces los clics no se registraban), así que agregué un MOUSEEVENTF_LEFTUP adicional . Entonces estaba funcionando de manera confiable
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)
muy fácil 1- instalar pakage:
pip install mouse
2- agregar biblioteca al proyecto:
import mouse
3- úsalo por ejemplo:
mouse.right_click()
en esta url describa todas las funciones que puede usar: