¿Necesita hacer que el mouse se mueva en código sin intervención del usuario?
rahul
Más información sería muy útil ...
Gabriel Hurley
Trabajo en Windows y no uso ningún kit de herramientas. Soy realmente nuevo en Python y nunca antes había trabajado con ninguna GUI. De donde empiezo? ¿Qué manual debo leer?
Sasha
2
¿Por qué necesitas una pitón para hacer eso? ¿Puedes hacerlo tú mismo? En una nota más seria, por qué lo necesita, ¿cuál es el propósito, un poco más detalles serían grandes
Anurag Uniyal
2
Solo para su información, si está usando esto para evitar que su máquina se bloquee, podría estar violando la política de seguridad de su empresa u organización, ya que es un medio de eludir las propiedades de bloqueo automático de la computadora. He usado esto en algunos lugares, no hay problema, solo asegúrese de consultar con sus administradores de sistemas. He visto a personas perder sus trabajos por cosas menores como esta.
AlienAnarchist
Respuestas:
329
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):
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.
¿Puedo usar esta biblioteca para controlar la velocidad / aceleración del mouse?
Someoneelse
Esto tenía la ventaja de no requerir la instalación (y la revisión y aprobación de la administración asociada) de módulos Python no estándar en más de 50 cajas de ventanas (quioscos de señalización digital).
brichins
44
probado en python3.xlas obras también, no dude en corregir la respuesta
WhatsThePoint
132
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.
Pyautogui es un gran módulo, pero desafortunadamente es muy lento. En Ubuntu mueve el cursor 2-3 veces por segundo. ¡Increíble! Pyuserinput es 1000 veces más rápido.
Vladyslav Savchenko
1
Para las personas que intentan instalar pyautogui, mire aquí stackoverflow.com/questions/5892297/... y asegúrese de poner sudo delante de sus comandos si tiene problemas con los permisos.
retodaredevil
55
"PyAutoGUI es lento" debido a una función de seguridad que agrega una pausa de 0.1 segundos después de cada llamada. Si su script está fuera de control, puede golpear el mouse en la esquina superior izquierda en esos 0.1 segundos para detenerlo. Para deshabilitar esto, ejecute pyautogui.PAUSE = 0 (aunque esto no se recomienda, porque no puede usar el mouse / teclado para detener el script).
Al Sweigart
75
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
¡Su código ctypes funcionó para mí sin bibliotecas adicionales! (Python 2.6 en Windows 7)
intrepion
1
¡Sin el uso de ninguna biblioteca externa! Gracias
Akshat Agarwal
2
¡Gracias! No puedo soportar que haya como 3 bibliotecas de terceros con las que puede hacer esto, sin embargo, las 3 bibliotecas son molestas para instalar o solucionar problemas. Esta solución de ctypes es la primera solución nativa de Python y funciona mejor que cualquier otra que haya encontrado.
DuckPuncher
¿Dónde está la documentación SetCursorPos?
ArtOfWarfare
22
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:
PyMouse ha sido reemplazado por PyUserInput , se ajusta exactamente a la solicitud, es fácil de usar y multiplataforma. Big +1
user336851
@ user336851, ¿sabe cómo tap spacey tap screen shot keymediante PyUswerInput?
user3768495
@ user336851, en este momento PyUserInputestá roto. No puedo decir si funciona bien o no porque ni siquiera puedo hacer que se instale debido a dependencias rotas.
DuckPuncher
20
Linux
fromXlibimport X, display
d = display.Display()
s = d.screen()
root = s.root
root.warp_pointer(300,300)
d.sync()
Un google para "Python que controla el movimiento del mouse" ahora encuentra esta página, cómo meta.
Copas
2
En aras de la exhaustividad, dado que la pregunta también pedía simular los clics del mouse, agregaré: 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.
user336851
44
@Copas: los resultados que aparecen en su Google no significan nada. Estás en una burbuja Esto aparece en una búsqueda de DuckDuckGo para el mismo término, eso es algo real. Eso es algo que todos los demás pueden reproducir y ver por sí mismos. Eso es meta.
ArtOfWarfare
1
Para controlar el mouse en una sesión VNC, necesita el número de pantalla así como "d = display.Display (': 1')" donde: 1 es el número de pantalla.
Zafer
12
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 importButton,Controller
mouse =Controller()# Read pointer positionprint('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)
Intenté ejecutar un programa antiguo en una computadora con Windows y no funcionó, así que pruébelo antes de usarlo. Este programa al menos afirma ser compatible con ambos.
Pro Q
Hice algunas pruebas, y resultó que mi problema era que en Mac, tener flotantes como valores de coordenadas funciona bien, pero en Windows, las coordenadas deben ser enteros. Este módulo es multiplataforma.
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.
Querrá llamar pyautogui.moveTo(x, y)porque move()mueve el cursor en relación con su posición actual.
Al Sweigart
Ah, lo siento, entendí mal tu comentario original. Sí, ambas funciones funcionan. moveTo()se mueve a una ubicación absoluta, mientras que se move()mueve en relación con la ubicación actual del cursor.
Al Sweigart
1
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')
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
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):
fuente
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.x
las obras también, no dude en corregir la respuestaPruebe con el módulo PyAutoGUI . Es multiplataforma.
Y entonces:
También tiene otras características:
Esto es mucho más fácil que pasar por todas las cosas de win32con.
fuente
Puedes usar
win32api
octypes
módulo para usar win32 apis para controlar el mouse o cualquier interfaz gráfica de usuarioAquí hay un ejemplo divertido para controlar el mouse usando win32api:
Un clic usando ctypes:
fuente
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):
Si, en cambio, desea que el cursor se mueva visiblemente por la pantalla a una ubicación determinada, puede usar el comando smooth_move:
fuente
Echa un vistazo a la plataforma cruzada PyMouse: https://github.com/pepijndevos/PyMouse/
fuente
tap space
ytap screen shot key
mediante PyUswerInput?PyUserInput
está roto. No puedo decir si funciona bien o no porque ni siquiera puedo hacer que se instale debido a dependencias rotas.Linux
Fuente: movimiento del mouse Python en 5 líneas de código (solo Linux) .
fuente
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,
fuente
Función rápida y sucia que hará clic izquierdo en cualquier
clicks
momento en Windows 7 usando lactypes
biblioteca. No se requieren descargas.fuente
A partir de 2020 , puede usar el mouse :
Caracteristicas
fuente
Si desea mover el mouse, use esto:
Si desea hacer clic, use esto:
Si no lo ha
pyautogui
instalado, debe tener Python conectado a CMD. Vaya a CMD y escriba:pip install pyautogui
Esto se instalará
pyautogui
para Python 2.x.Para Python 3.x, probablemente tendrá que usar
pip3 install pyautogui
opython3 -m pip install pyautogui
.fuente
pyautogui.moveTo(x, y)
porquemove()
mueve el cursor en relación con su posición actual.moveTo()
se mueve a una ubicación absoluta, mientras que semove()
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:
Aquí está la fuente: Cómo controlar su mouse en Python
fuente
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
fuente
muy fácil 1- instalar pakage:
2- agregar biblioteca al proyecto:
3- úsalo por ejemplo:
en esta url describa todas las funciones que puede usar:
https://github.com/boppreh/mouse
fuente