Primeros pasos con Python PyAutoGUI

La biblioteca PyAutoGUI proporciona soporte multiplataforma para administrar las operaciones del mouse y el teclado a través del código para permitir la automatización de tareas.

Introducción

En este tutorial, vamos a aprender cómo usar la biblioteca pyautogui en Python 3. La biblioteca PyAutoGUI brinda soporte multiplataforma para administrar Operaciones de mouse y teclado a través de código para permitir la automatización de tareas. La biblioteca pyautogui también está disponible para Python 2; sin embargo, usaremos Python 3 a lo largo de este tutorial.

Una herramienta como esta tiene muchas aplicaciones, algunas de las cuales incluyen tomar capturas de pantalla, automatizar pruebas de GUI (como Selenio), automatizar tareas que solo se pueden hacer con una GUI, etc.

Antes de continuar con este tutorial, tenga en cuenta que existen algunos requisitos previos. Debe tener una comprensión básica de la sintaxis de Python y/o haber realizado al menos programación de nivel principiante en algún otro idioma. Aparte de eso, el tutorial es bastante simple y fácil de seguir para principiantes.

Instalación

El proceso de instalación de PyAutoGUI es bastante simple para todos los sistemas operativos. Sin embargo, hay algunas dependencias para Mac y Linux que deben instalarse antes de que la biblioteca PyAutoGUI pueda instalarse y usarse en los programas.

ventanas

Para Windows, PyAutoGUI no tiene dependencias. Simplemente ejecute el siguiente comando en su símbolo del sistema y se realizará la instalación.

1
$ pip install PyAutoGUI

Mac

Para Mac, los módulos pyobjc-core y pyobjc deben instalarse en secuencia primero. A continuación se muestran los comandos que debe ejecutar en secuencia en su terminal para una instalación exitosa:

1
2
3
$ pip3 install pyobjc-core
$ pip3 install pyobjc
$ pip3 install pyautogui

####linux

Para Linux, la única dependencia es python3-xlib (para Python 3). Para instalar eso, seguido de pyautogui, ejecute los dos comandos mencionados a continuación en su terminal:

1
2
$ pip3 install python3-xlib
$ pip3 install pyautogui

Ejemplos de código básico

En esta sección, cubriremos algunas de las funciones más utilizadas de la biblioteca PyAutoGUI.

Funciones genéricas

La función position()

Antes de que podamos usar las funciones PyAutoGUI, necesitamos importarlo a nuestro programa:

1
import pyautogui as pag

Esta función position() nos dice la posición actual del mouse en nuestra pantalla:

1
pag.position()

Producción:

1
Point (x = 643, y = 329)
La función onScreen()

La función onScreen() nos dice si el punto con las coordenadas x e y existe en la pantalla:

1
2
print(pag.onScreen(500, 600))
print(pag.onScreen(0, 10000))

Producción:

1
2
True
False

Aquí podemos ver que el primer punto existe en la pantalla, pero el segundo punto cae más allá de las dimensiones de la pantalla.

La función size()

La función size() encuentra la altura y el ancho (resolución) de una pantalla.

1
pag.size()

Producción:

1
Size (width = 1440, height = 900)

Su salida puede ser diferente y dependerá del tamaño de su pantalla.

Operaciones comunes del mouse

En esta sección, cubriremos las funciones PyAutoGUI para la manipulación del mouse, que incluye tanto mover la posición del cursor como hacer clic en los botones automáticamente a través del código.

La función moveTo()

La sintaxis de la función moveTo() es la siguiente:

1
pag.moveTo(x_coordinate, y_coordinate)

El valor de x_coordinate aumenta de izquierda a derecha en la pantalla, y el valor de y_coordinate aumenta de arriba a abajo. El valor de x_coordinate y y_coordinate en la esquina superior izquierda de la pantalla es 0.

Mira el siguiente guión:

1
2
3
4
5
pag.moveTo(0, 0)
pag.PAUSE = 2
pag.moveTo(100, 500) #
pag.PAUSE = 2
pag.moveTo(500, 500)

En el código anterior, el enfoque principal es la función moveTo() que mueve el cursor del mouse en la pantalla según las coordenadas que proporcionamos como parámetros. El primer parámetro es la coordenada x y el segundo parámetro es la coordenada y. Es importante notar que estas coordenadas representan la posición absoluta del cursor.

Una cosa más que se ha introducido en el código anterior es la propiedad PAUSE; básicamente detiene la ejecución del script durante un período de tiempo determinado. La propiedad PAUSE se ha agregado en el código anterior para que pueda ver la ejecución de la función; de lo contrario, las funciones se ejecutarán en una fracción de segundo y no podrá ver el cursor moviéndose de un lugar a otro en la pantalla.

Otra solución para esto sería indicar el tiempo de cada operación moveTo() como el tercer parámetro en la función, p. moveTo(x, y, tiempo_en_segundos).

Ejecutar el script anterior puede resultar en el siguiente error:

Nota: Posible error

1
2
3
4
5
6
7
8
Traceback (most recent call last):
  File "a.py", line 5, in <module>
    pag.moveTo (100, 500)
  File "/anaconda3/lib/python3.6/site-packages/pyautogui/__init__.py", line 811, in moveTo
    _failSafeCheck()
  File "/anaconda3/lib/python3.6/site-packages/pyautogui/__init__.py", line 1241, in _failSafeCheck
    raise FailSafeException ('PyAutoGUI fail-safe triggered from mouse moving to a corner of the screen. To disable this fail-safe, set pyautogui.FAILSAFE to False. DISABLING FAIL-SAFE IS NOT RECOMMENDED.')
pyautogui.FailSafeException: PyAutoGUI fail-safe triggered from mouse moving to a corner of the screen. To disable this fail-safe, set pyautogui.FAILSAFE to False. DISABLING FAIL-SAFE IS NOT RECOMMENDED.

Si la ejecución de la función moveTo() genera un error similar al que se muestra arriba, significa que la seguridad de su computadora está habilitada. Para deshabilitar el mecanismo de seguridad, agregue la siguiente línea al comienzo de su código:

1
pag.FAILSAFE = False

Esta función está habilitada de forma predeterminada para que pueda detener fácilmente la ejecución de su programa pyautogui moviendo manualmente el mouse hacia la esquina superior izquierda de la pantalla. Una vez que el mouse esté en esta ubicación, pyautogui lanzará una excepción y saldrá.

La función moveRel()

Las coordenadas de la función moveTo() son absolutas. Sin embargo, si desea mover la posición del mouse en relación con la posición actual del mouse, puede usar la función moveRel().

Lo que esto significa es que el punto de referencia para esta función, al mover el cursor, no sería el punto superior izquierdo de la pantalla (0, 0), sino la posición actual del cursor del mouse. Entonces, si el cursor de su mouse está actualmente en el punto (100, 100) en la pantalla y llama a la función moveRel() con los parámetros (100, 100, 2), la nueva posición de su cursor de movimiento sería ( 200, 200).

Puede usar la función moveRel() como se muestra a continuación:

1
pag.moveRel(100, 100, 2)

El script anterior moverá el cursor 100 puntos a la derecha y 100 puntos hacia abajo en 2 segundos, con respecto a la posición actual del cursor.

La función click()

La función click() se utiliza para imitar las operaciones de clic del ratón. La sintaxis de la función click() es la siguiente:

1
pag.click(x, y, clicks, interval, button)

Los parámetros se explican a continuación:

  • x: la coordenada x del punto a alcanzar
  • y: la coordenada y del punto a alcanzar
  • clics: el número de clics que le gustaría hacer cuando el cursor llegue a ese punto en la pantalla
  • intervalo: la cantidad de tiempo en segundos entre cada clic del mouse, es decir, si está haciendo varios clics del mouse
  • botón: especifica qué botón del ratón te gustaría pulsar cuando el cursor llegue a ese punto de la pantalla. Los valores posibles son right, left y middle.

Aquí hay un ejemplo:

1
pag.click(100, 100, 5, 2, 'right')

También puede ejecutar funciones de clic específicas de la siguiente manera:

1
2
3
4
pag.rightClick(x, y)
pag.doubleClick(x, y)
pag.tripleClick(x, y)
pag.middleClick(x, y)

Aquí x e y representan las coordenadas x e y, al igual que en las funciones anteriores.

También puede tener un control más detallado sobre los clics del mouse especificando cuándo presionar el mouse hacia abajo y cuándo soltarlo. Esto se hace usando las funciones mouseDown y mouseUp, respectivamente.

Aquí hay un breve ejemplo:

1
2
pag.mouseDown(x=x, y=y, button='left')
pag.mouseUp(x=x, y=y, button='left')

El código anterior es equivalente a simplemente hacer una llamada pag.click(x, y).

La función scroll()

La última función del mouse que vamos a cubrir es scroll. Como era de esperar, tiene dos opciones: desplazarse hacia arriba y desplazarse hacia abajo. La sintaxis de la función scroll() es la siguiente:

1
pag.scroll(amount_to_scroll, x=x_movement, y=y_movement)

Para desplazarse hacia arriba, especifique un valor positivo para el parámetro amount_to_scroll y para desplazarse hacia abajo, especifique un valor negativo. Aquí hay un ejemplo:

1
pag.scroll(100, 120, 120)

Muy bien, esto fue todo para las funciones del ratón. A estas alturas, debería poder controlar los botones del mouse, así como los movimientos a través del código. Pasemos ahora a las funciones del teclado. Hay muchos, pero cubriremos solo aquellos que se usan con más frecuencia.

Operaciones de teclado comunes

Antes de pasar a las funciones, es importante que sepamos qué teclas se pueden presionar a través del código en pyautogui, así como su convención de nomenclatura exacta. Para hacerlo, ejecute el siguiente script:

1
print(pag.KEYBOARD_KEYS)

Producción:

1
['\t', '\n', '\r', ' ', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', 'accept', 'add', 'alt', 'altleft', 'altright', 'apps', 'backspace', 'browserback', 'browserfavorites', 'browserforward', 'browserhome', 'browserrefresh', 'browsersearch', 'browserstop', 'capslock', 'clear', 'convert', 'ctrl', 'ctrlleft', 'ctrlright', 'decimal', 'del', 'delete', 'divide', 'down', 'end', 'enter', 'esc', 'escape', 'execute', 'f1', 'f10', 'f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f2', 'f20', 'f21', 'f22', 'f23', 'f24', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'final', 'fn', 'hanguel', 'hangul', 'hanja', 'help', 'home', 'insert', 'junja', 'kana', 'kanji', 'launchapp1', 'launchapp2', 'launchmail', 'launchmediaselect', 'left', 'modechange', 'multiply', 'nexttrack', 'nonconvert', 'num0', 'num1', 'num2', 'num3', 'num4', 'num5', 'num6', 'num7', 'num8', 'num9', 'numlock', 'pagedown', 'pageup', 'pause', 'pgdn', 'pgup', 'playpause', 'prevtrack', 'print', 'printscreen', 'prntscrn', 'prtsc', 'prtscr', 'return', 'right', 'scrolllock', 'select', 'separator', 'shift', 'shiftleft', 'shiftright', 'sleep', 'space', 'stop', 'subtract', 'tab', 'up', 'volumedown', 'volumemute', 'volumeup', 'win', 'winleft', 'winright', 'yen', 'command', 'option', 'optionleft', 'optionright']
La función typewrite()

La función typewrite() se usa para escribir algo en un campo de texto. La sintaxis de la función es la siguiente:

1
pag.typewrite(text, interval)

Aquí texto es lo que desea escribir en el campo e intervalo es el tiempo en segundos entre cada pulsación de tecla. Aquí hay un ejemplo:

1
pag.typewrite('Junaid Khalid', 1)

Al ejecutar el script anterior, ingresará el texto "Junaid Khalid" en el campo que está actualmente seleccionado con una pausa de 1 segundo entre cada pulsación de tecla.

Otra forma en que se puede usar esta función es pasando una lista de teclas que le gustaría presionar en una secuencia. Para hacerlo a través del código, vea el siguiente ejemplo:

1
pag.typewrite(['j', 'u', 'n', 'a', 'i', 'd', 'e', 'backspace', 'enter'])

En el ejemplo anterior, se ingresaría el texto “junaide”, seguido de la eliminación de la “e” final. La entrada en el campo de texto se enviará presionando la tecla Enter.

La función hotkey()

Si no ha notado esto hasta ahora, las teclas que mostramos arriba no mencionan operaciones combinadas como Control + C para el comando de copia. En caso de que estés pensando que podrías hacer eso pasando la lista ['ctrl', 'c'] a la función typewrite(), estás equivocado. La función typewrite() presionaría ambos botones en una secuencia, no simultáneamente. Y como probablemente ya sepa, para ejecutar el comando de copia, debe presionar la tecla C mientras mantiene presionada la tecla ctrl.

Para presionar dos o más teclas simultáneamente, puede usar la función hotkey(), como se muestra aquí:

1
2
3
pag.hotkey('shift', 'enter')
pag.hotkey('ctrl', '2' ) # For the @ symbol
pag.hotkey('ctrl', 'c')  # For the copy command
La función de captura de pantalla ()

Si desea tomar una captura de pantalla de la pantalla en cualquier momento, la función screenshot () es la que está buscando. Veamos cómo podemos implementar eso usando PyAutoGUI:

1
scree_shot = pag.screenshot() # to store a PIL object containing the image in a variable

Esto almacenará un objeto PIL que contiene la imagen en una variable.

Sin embargo, si desea almacenar la captura de pantalla directamente en su computadora, puede llamar a la función captura de pantalla de esta manera:

1
pag.screenshot('ss.png')

Esto guardará la captura de pantalla en un archivo, con el nombre de archivo dado, en su computadora.

Las funciones confirm(), alert() y prompt()

El último conjunto de funciones que vamos a cubrir en este tutorial son las funciones del cuadro de mensaje. Aquí hay una lista de las funciones del cuadro de mensaje disponibles en PyAutoGUI:

  1. Cuadro de confirmación: muestra información y le ofrece dos opciones, es decir, ‘Aceptar’ y ‘Cancelar’
  2. Cuadro de alerta: muestra alguna información y para confirmar que la ha leído. Muestra un solo botón, es decir, OK
  3. Cuadro de aviso: solicita cierta información del usuario y, al ingresar, el usuario debe hacer clic en el botón “Aceptar”.

Ahora que hemos visto los tipos, veamos cómo podemos mostrar estos botones en la pantalla en la misma secuencia que arriba:

1
2
3
pag.confirm("Are you ready?")
pag.alert("The program has crashed!")
pag.prompt("Please enter your name: ")

En la salida, verá la siguiente secuencia de cuadros de mensaje.

Confirmar:

Alerta:

Inmediato:

Conclusión

En este tutorial, aprendimos a usar la biblioteca de automatización PyAutoGUI en Python. Comenzamos hablando sobre los requisitos previos para este tutorial, su proceso de instalación para diferentes sistemas operativos, y luego aprendimos sobre algunas de sus funciones generales. Después de eso, estudiamos las funciones específicas de los movimientos del mouse, el control del mouse y el control del teclado.

Después de seguir este tutorial, debería poder usar PyAutoGUI para automatizar las operaciones de la GUI para tareas repetitivas en su propia aplicación.