AutoPy – Toolkit de automatización multiplataforma



Versión: 2.x (para una alternativa para Python 3.x véase PyAutoGUI).

Introducción

AutoPy es una excelente herramienta para automatizar tareas en Max OS X, Windows y X11, especialmente aquellas que incluyen una interfáz gráfica. Escrito completamente en ANSI C. Eficiente, simple y fácil.

Instalación

Para Windows, los instaladores están disponibles en esta página.

En las demás plataformas, simplemente:

easy_install autopy

O compilar desde el código de fuente en GitHub:

$ git clone git://github.com/msanders/autopy.git
$ cd autopy
$ python setup.py build
# python setup.py install

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 u"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.



4 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 un comentario