AutoPy – Toolkit de automatización multiplataforma

AutoPy – Toolkit de automatización multiplataforma

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.

6 comentarios.

  1. 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!!

Deja una respuesta