Actualizado 19/06/2018.
Introducción
AutoPy (autopy.org) es una excelente herramienta para automatizar tareas en Max OS X, Microsoft Windows (a partir de Windows 7) y X11, especialmente aquellas que incluyen una interfáz gráfica, para Python 2.7 y 3.5 o superior. Escrito completamente en Rust ─un lenguaje moderno para programación de sistemas─ y de código abierto: cualquiera puede colaborar vía el proyeto en GitHub. Eficiente, simple y fácil.
Instalación
Por lo general no será necesario compilar AutoPy para instalarlo ya que provee varios paquetes precompilados. Así que en primer lugar intentémoslo vía pip:
pip install -U autopy
Si obtienes algún error, entonces tendremos que hacerlo manualmente. Primero debemos descargar Rust, vía su instalador oficial llamado rustup. Puedes hacerlo desde este enlace. Una vez instalado, ejecutamos lo siguiente para compilar e instalar AutoPy.
rustup default nightly
pip install -U setuptools-rust
pip install -U autopy
Aplicación
El paquete incluye 6 módulos que se importan de manera automática al hacer:
import autopy
Mensajes
Mostrar un mensaje en pantalla:
autopy.alert.alert("Hola mundo")
Retorna True
si se ha presionado aceptar, False
si se ha cancelado. Si no se especifica el botón de cancelar siempe retorna True
, incluso si se ha cerrado el mensaje. Para añadir el botón de cancelar:
autopy.alert.alert("Hola mundo", cancel_button="Cancelar")
Los textos de ambos botones pueden especificarse:
autopy.alert.alert("¿Desea actualizar?", default_button="Si", cancel_button="No, gracias")
En este momento la función no soporta textos no-ASCII, por lo que es probable que veas un glifo extraño en lugar del «¿».
En Windows, debido a las limitaciones del API, el sistema reemplaza default_button
por «Aceptar» y cancel_button
por «Cancelar» (o la traducción correspondiente en el idioma configurado).
Por último, puede especificarse el título del mensaje:
autopy.alert.alert("¿Desea actualizar?", title="Titulo", default_button="Si", cancel_button="No, gracias")
O directamente:
autopy.alert.alert("¿Desea actualizar?", "Titulo", "Si", "No, gracias")
Bitmaps
El módulo autopy.bitmap permite abrir archivos bitmap, obtener información de un píxel determinado, buscar una imágen dentro de otra, entre otras.
Provee un método sencillo de capturar la pantalla:
screen = autopy.bitmap.capture_screen()
screen
es una instancia de la clase Bitmap
. Entre sus métodos se encuentra get_color
, para obtener información de un píxel determinado:
screen.get_color(100, 100)
La función retorna un entero largo que puede ser convertido a una tupla RGB con el módulo autopy.color:
autopy.color.hex_to_rgb(screen.get_color(100, 100))
Mecanismo inverso:
r, g, b = autopy.color.hex_to_rgb(screen.get_color(100, 100)) autopy.color.rgb_to_hex(r, g, b)
Para guardar la captura como PNG o BMP:
screen.save("screen.png")
El formato es determinado por el nombre del archivo, a menos que se especifique un segundo parámetro que indique lo contrario. Actualmente AutoPy soporta únicamente archivos BMP y PNG. Si el archivo ya existe, es reemplazado automáticamente.
Buscar una imágen dentro de otra:
persona = autopy.bitmap.Bitmap.open("persona.png") fondo = autopy.bitmap.Bitmap.open("fondo.png") pos = fondo.find_bitmap(persona) if pos: print("Persona en la posición %d, %d." % pos) else: print("No encontrado.")
Para bitmaps pequeños que quieras incluír en tu código sin necesidad de llevar consigo un archivo externo, la función Bitmap.to_string()
convierte una imágen a una cadena comprimida que luego puede descomprimirse como una instancia Bitmap:
>>> img = autopy.bitmap.Bitmap.open("imagen.png").to_string() >>> print(img) 'b2,3,eNpjYGD4f/MwBDGA2QBcMwpt' >>> autopy.bitmap.Bitmap.from_string(img) <Bitmap object at 0x12278>
Teclado
El módulo autopy.key contiene varias funciones para controlar el teclado.
Puede emularse la presión de una tecla de la siguiente manera:
autopy.key.tap("r")
O usar alguna de las constantes:
autopy.key.tap(autopy.key.K_F1)
Presiona e inmediatamente libera la tecla. La función key.toggle()
permite especificar el comportamiento:
autopy.key.toggle("a", True) # Presiona autopy.key.toggle("a", False) # Libera
Para utilizar algún modificador junto con la tecla, se emplea el parámetro opcional modifiers. Por ejemplo:
autopy.key.tap("a", autopy.key.MOD_CONTROL)
Presiona Control + A. Si se quisiera añadir la tecla Shift, podría utilizarse:
autopy.key.tap("a", autopy.key.MOD_SHIFT | autopy.key.MOD_CONTROL)
Los demás modificadores son: key.MOD_ALT
, key.MOD_NONE
y key.MOD_META
.
key.type_string()
permite escribir una cadena simulando la presión de teclas:
autopy.key.type_string("Hola")
Junto con el parámetro wpm
para especificar las palabras por minuto (words per minute):
autopy.key.type_string("Esto es un mensaje", 1)
Mouse
autopy.mouse: fácil manejo del cursor.
Para obtener su posición, simplemente:
autopy.mouse.get_pos()
Retorna una tupla (x, y).
Si se desea cambiar de posición:
autopy.mouse.move(500, 500)
Mueve el cursor a las coordenadas (x, y) pasadas como parámetros. mouse.smooth_move()
en lugar de mover el cursor repentinamente lo desplaza hacia la posición indicada.
autopy.mouse.smooth_move(500, 500)
Ambas funciones arrojan ValueError
si las coordenadas se encuentran fuera del rango.
Simular un click del ratón:
autopy.mouse.click()
Por defecto el botón izquierdo es empleado, pero puede alternarse indicando otro como parámetro:
autopy.mouse.click(autopy.mouse.RIGHT_BUTTON) autopy.mouse.click(autopy.mouse.CENTER_BUTTON)
Esta función es un wrapper alrededor de mouse.toggle()
, que permite especificar si se presiona o libera el botón especificado:
autopy.mouse.toggle(True) # Presiona el botón izquierdo autopy.mouse.toggle(False) # Libera el botón izquierdo autopy.mouse.toggle(False, autopy.mouse.RIGHT_BUTTON) # Libera el botón derecho
Pantalla
Obtener el tamaño de la pantalla:
autopy.screen.get_size()
Retorna una tupla (ancho, alto)
Para determinar si un punto (x, y) se encuentra dentro de ella:
autopy.screen.point_visible(500, 450) # True autopy.screen.point_visible(3500, 2160) # False
Y si se quisiera obtener el color (valor hexadecimal) de dichos puntos:
autopy.screen.get_color(500, 450) autopy.screen.get_color(3500, 2160) # ValueError (fuera del rango)
OSError
es lanzado si fallaron las llamadas al sistema.
Curso online 👨💻
¡Ya lanzamos el curso oficial de Recursos Python en Udemy!
Un curso moderno para aprender Python desde cero con programación orientada a objetos, SQL y tkinter
en 2024.
Consultoría 💡
Ofrecemos servicios profesionales de desarrollo y capacitación en Python a personas y empresas. Consultanos por tu proyecto.
YoungBlood says:
como puedo instalar autopy? estoy usando windows 7.
Gracias por el tutorial esta muy bueno
Recursos Python says:
Hola. Puedes descargar el archivo wheel para Windows desde este enlace, y luego instalarlo vía
pip install nombre_del_archivo.whl
.Si tienes algún problema con eso, intenta estas otras instrucciones.
Saludos!
Principe_Azul says:
Hola, excelente tutorial, un poco corto, pero bien explicado y entendible, te agradezco por tomarte el trabajo de brindarnos tu buen manual, además de ser en español.
Gracias a vos pude solucionar un problema que tenia, ahora podré poner mi foto en mis programas así no las puedan ni modificar ni reemplazar.
Nuevamente muchas gracias!!
Recursos Python says:
Gracias por tomarte el tiempo de comentar. Te mando un saludo.
Marc says:
Muy útil. Gracias!
Recursos Python says:
Me alegro que te haya servido. Gracias por comentar. Un saludo!