Automatización de GUI usando Python

En este artículo, exploraremos cómo podemos automatizar la GUI usando Python. Hay muchos módulos que pueden hacer estas cosas, pero en este artículo, usaremos un módulo llamado PyAutoGUI para realizar la GUI y la automatización del escritorio usando python. 

Exploraríamos dos secciones:

  • Cómo usar automáticamente el puntero del mouse para realizar ciertas tareas como mover el cursor, hacer clic en un punto determinado de la pantalla, etc.
  • Además, exploraríamos cómo podemos automatizar las pulsaciones de teclas del teclado.

Instalación

Este módulo no viene precargado con Python. Para instalarlo, escriba el siguiente comando en la terminal.

pip install pyautogui # for windows
or 
pip3 install pyautogui #for linux and Macos

Empezando

Debemos saber el tamaño de la pantalla de mi dispositivo antes de realizar cualquier automatización. Afortunadamente, PyautoGUI nos ayuda a obtenerlo fácilmente usando la función .size(). Devuelve un objeto de tamaño con dos valores que representan el ancho y alto de la pantalla respectivamente. La implementación es la siguiente.

Sintaxis: pyautogui.size()

Parámetros: esta función no toma ningún parámetro adicional

Return Type: Nos devuelve el tamaño de la pantalla actual en píxeles en un objeto Size 

A continuación se muestra la implementación:

Python3

# importing modules
import pyautogui
 
# returns a size object with
# width and height of the screen
print(pyautogui.size())

Producción:

Size(width=1920, height=1080)

Automatización de los movimientos del mouse

Obtener la posición actual del cursor del mouse:

En primer lugar, estaríamos donde está actualmente el cursor de mi mouse, para eso podemos usar la función .position(). La función nuevamente devuelve un objeto de punto con valores x e y que obtiene la posición actual del mouse.

Sintaxis: pyautogui.position()

Parámetros: esta función no toma ningún parámetro adicional

Tipo de Retorno: Nos devuelve la posición del cursor del mouse en un objeto Punto

A continuación se muestra la implementación:

Python3

import pyautogui
 
# returns a point  object with
# x and y values
print(pyautogui.position())

Producción:

Point(x=1710, y=81)

Mover el cursor y hacer clic en puntos específicos:

Ahora intentaríamos mover el cursor del mouse y hacer clic en puntos específicos y abrir una aplicación y cerrarla. Para mover el puntero del mouse, podemos usar .moveto() y especificar valores x,y junto con una duración en la que realizará la operación, y usaríamos la función .click() para hacer clic en el lugar donde está el puntero del mouse. ubicado ahora mismo. El código básicamente mueve el cursor del mouse a los valores (519,1060) (x,y) y luego simula un clic usando .click() donde se encuentra el cursor en este momento, luego nos movemos nuevamente a la posición (1717,352) usando moveTo() y simule un clic nuevamente. 

Sintaxis: pyautogui.moveTo() y pyautogui.click()

Parámetros: Esta función moveTo tiene dos parámetros requeridos y uno opcional, los primeros dos valores de x e y son valores requeridos mientras que la duración es un parámetro adicional que anima el movimiento del mouse sobre el número de segundos asignados al parámetro de duración . El método de clic en el ejemplo no toma ningún parámetro, pero se puede usar un par de parámetros opcionales para hacer clic en una posición particular del teclado.

Tipo de devolución: las funciones no devuelven nada, pero realizan los trabajos del cursor en un punto específico y luego hacen clic allí mediante programación.  

A continuación se muestra la implementación:

Python3

import pyautogui
 
 
# moves to (519,1060) in 1 sec
pyautogui.moveTo(519, 1060, duration = 1)
 
# simulates a click at the present
# mouse position
pyautogui.click()
 
# moves to (1717,352) in 1 sec
pyautogui.moveTo(1717, 352, duration = 1)
 
# simulates a click at the present
# mouse position
pyautogui.click()

Producción:

Ahora exploraríamos dos métodos más, a saber, .moveRel(), que nos ayuda a movernos en relación con la posición en la que nos encontramos ahora y, finalmente, veríamos cómo podemos simular un clic derecho usando pyAutoGUI. Comenzamos con la importación del paquete y estimulamos el cursor para que se mueva 498 px y 998 px hacia abajo desde su posición actual. Luego usamos el método click() para simular un clic izquierdo. Luego nos movemos a una ubicación específica usando el método .moveTo(). Ahora volvemos a hacer clic en la posición actual del cursor, pero esta vez le indicamos que simule un clic con el botón derecho en lugar de con el botón izquierdo pasando el parámetro button=»right» (el valor predeterminado es button=»left»). Luego ganamos para movernos a una ubicación específica y hacemos clic izquierdo allí.

Sintaxis: pyautogui.moveRel()

Parámetros: Esta función moveRel también tiene dos parámetros requeridos y uno opcional, los primeros dos valores de x e y son valores requeridos mientras que la duración es un parámetro adicional que anima el movimiento del mouse sobre el número de segundos asignados a la duración parámetro. Además, usamos un parámetro adicional para la función pyautogui.click(), usamos button=”right” que simula un clic derecho en lugar del clic izquierdo predeterminado.

 Tipo de devolución: las funciones no devuelven nada, pero realizan los trabajos de mover el cursor hacia la izquierda 498 px y hacia abajo 998 px desde su posición actual y luego simular un clic derecho programáticamente. 

A continuación se muestra la implementación:

Python3

import pyautogui
 
# moving the cursor left 498 px & down
# 998px from it's current position
pyautogui.moveRel(-498,996, duration = 1)
 
# clicks at the present location
pyautogui.click()
 
# moves to the specified location
pyautogui.moveTo(1165,637, duration = 1)
 
# right clicks at the present cursor
# location
pyautogui.click(button="right")
 
# moves to the specified location
pyautogui.moveTo(1207,621, duration = 1)
 
# clicks at the present location
pyautogui.click()

Producción:

Arrastrar el cursor a una posición específica de la pantalla:

Ahora veríamos cómo podemos arrastrar ventanas usando pyAutoGUI. Podemos usar .dragto() y .dragrel() que son exactamente la forma en que funcionan .moveto() y .movrel() excepto que en este caso, mantienen presionado el botón izquierdo mientras mueven el cursor. En este programa, simplemente importamos los módulos, luego nos movemos a uno específico usando la función .moveTo(). Luego hacemos clic izquierdo en la posición actual del cursor. Ahora volvemos a mover el cursor a una ubicación específica. Luego usamos la función .dragTo() para arrastrar (clic izquierdo y mantener presionado) a una ubicación específica. Finalmente, usamos la función dragRel() que arrastra el cursor en relación con su posición actual a 50 px hacia la derecha y 50 px hacia abajo.

Sintaxis: pyautogui.dragTo() y pyautogui.dragRel()

Parámetros: Ambas funciones tienen dos parámetros requeridos y uno opcional, los dos primeros valores de x e y son valores requeridos mientras que la duración es un parámetro adicional que anima el movimiento del mouse sobre el número de segundos asignados al parámetro de duración .

Tipo de devolución: las funciones no devuelven nada, pero realizan los trabajos de hacer clic con el botón izquierdo y mantener presionado y mueve el cursor a la posición (500,500) y arrastra el cursor en relación con su posición a 5opx a la derecha y 50 px hacia abajo mediante programación. 

A continuación se muestra la implementación:

Python3

import pyautogui
 
# cursor moves to a specific position
pyautogui.moveTo(519,1060, duration = 1)
 
# left clicks at the current position
pyautogui.click()
 
# cursor moves to a specific position
pyautogui.moveTo(1550,352, duration = 1)
 
# left clicks and holds and moves the
# curson to (500,500) position
pyautogui.dragTo(500,500, duration = 1)
 
# drags the cursor relative to it's
# position to 5opx right and 50 px down
pyautogui.dragRel(50,50, duration=1)

Producción:

Nota: El parámetro de duración en las funciones .moveTo(), .moveRel(), .dragTo() y .dragRel() es opcional, pero se proporciona para obtener un efecto de animación, sin las funciones de propiedad se ejecutarán instantáneamente, y sería difícil de entender. También, opcionalmente, pasamos los valores x e y en la función .click() que se puede usar para hacer clic en una ubicación diferente a la ubicación en la que se encuentra actualmente el cursor.

Automatización del teclado

Escribir automáticamente con el teclado:

Primero, aprenderíamos cómo simular escribir algo usando pyAutoGUI. Aquí, en este ejemplo, escribiríamos algo en un archivo de bloc de notas usando la función .typewrite(). En este código, primero importamos el tiempo y el módulo pyAutoGUI y luego usamos la función time.sleep() para pausar la ejecución del programa durante algunos segundos específicos. Luego usamos la función pyautogui.typewrite() para simular la escritura de teclas alfanuméricas. Se escribiría la frase dentro de las comillas. La implementación es la siguiente:

Sintaxis: pyautogui.typewrite()

Parámetros: la función tiene solo un parámetro, que es la string que debe escribirse.

Tipo de devolución: las funciones no devuelven nada, pero realizan el trabajo de simular la tipificación de una string que se pasa dentro de ella. 

A continuación se muestra la implementación:

Python3

# used to access time related functions
import time
import pyautogui
 
# pauses the execution of the program
# for 5 sec
time.sleep(5)
 
# types the string passed inside the
# function
pyautogui.typewrite("Geeks For Geeks!")

Producción:

Pulsando teclas específicas y simulando teclas de acceso rápido:

A continuación, exploraríamos dos funciones, la primera es .press() y la segunda es .hotkey(), la primera le ayuda a presionar una tecla generalmente utilizada para presionar teclas no alfanuméricas y las funciones .hotkeys() ayudan presione teclas de acceso rápido como ctrl+shift+esc, etc. Aquí también comenzamos el código importando dos módulos, time y pyAutoGUI. Luego pausamos la ejecución del programa durante 5 segundos usando la función dormir. escribimos la string usando la función typewrite. Luego usamos la función .press() para simular una pulsación de tecla y finalmente la función .hotkey() para simular la pulsación de teclas rápidas. En nuestro ejemplo, usamos la tecla de acceso directo ctrl+a que selecciona todo el texto. La implementación es la siguiente:

Sintaxis: pyautogui.press() y pyautogui.hotkey()

Parámetros: la función .press() tiene solo un parámetro, que es la tecla que debe presionarse, y la función .hotkey() tiene una serie de parámetros según la cantidad de teclas para simular la acción de la tecla de acceso directo.

Tipo de devolución: las funciones no devuelven nada, pero realizan el trabajo de simular presionar la tecla Intro y simulan presionar la tecla de acceso directo ctrl+a. 

A continuación se muestra la implementación:

Python3

# used to access time related functions
import time
import pyautogui
 
# pauses the execution of the program
# for 5 sec
time.sleep(5)
 
# types the string passed inside the
# function
pyautogui.typewrite("Geeks For Geeks!")
 
# simulates pressing the enter key
pyautogui.press("enter")
 
# simulates pressing the hotkey ctrl+a
pyautogui.hotkey("ctrl","a")

Producción:

Visualización de cuadros de mensaje

Ahora intentaríamos explorar algunos cuadros de mensaje de estilo JavaScript multiplataforma que nos proporciona pyAutoGUI. Utiliza el módulo Tkinter y PyMsgBox para mostrar estos cuadros. El código comienza con la importación de módulos, luego usamos diferentes cuadros de mensaje para mostrar diferentes mensajes. La función .alert() muestra una alerta en la que configuramos el título y el texto para que estén en blanco con un botón «Aceptar». Luego, la función .confirm() muestra un cuadro de diálogo de confirmación en el que nuevamente configuramos el título y el texto para que estén en blanco y mantenemos dos botones «OK» y «CANCEL». Luego, la función .prompt() muestra un cuadro de solicitud de confirmación en el que nuevamente configuramos el título, el texto y el valor predeterminado (lo que se escribiría de manera predeterminada en el cuadro de solicitud antes de que el usuario comience a escribir) en blanco. Finalmente, el . contraseña() muestra un cuadro de diálogo de contraseña en el que nuevamente configuramos el título y el texto para que estén en blanco y configuramos la máscara (el carácter que se reemplaza en lugar de las letras originales en la contraseña) para que sea «*». La implementación es la siguiente:

Sintaxis: pyautogui.alert(), pyautogui.confirm(), pyautogui.prompt() y pyautogui.password()

Parámetros: La función .alert() tiene tres parámetros que definen el título, el texto y los botones que se colocarán. La función .confirm() también tiene tres parámetros para texto, título y botones. La función .prompt() tiene tres parámetros para texto, título y valor predeterminado. .password() tiene cuatro parámetros para texto, título, valor predeterminado y máscara (el carácter que se reemplaza en lugar de las letras originales en la contraseña).  

Tipo de devolución: las funciones no devuelven nada, pero muestran una alerta en la que configuramos el título y el texto para que estén en blanco con un botón «Aceptar». Luego muestra un cuadro de diálogo de confirmación en el que nuevamente configuramos el título y el texto para que estén en blanco y mantenemos dos botones «OK» y «CANCEL». Luego, la función .prompt() muestra un cuadro de solicitud de confirmación en el que nuevamente configuramos el título, el texto y el valor predeterminado (lo que se escribiría de forma predeterminada en el cuadro de solicitud antes de que el usuario comience a escribir) para que esté en blanco. Finalmente, la función .password() muestra un cuadro de diálogo de contraseña en el que nuevamente configuramos el título y el texto para que estén en blanco y configuramos la máscara para que sea «*». 

A continuación se muestra la implementación:

Python3

import pyautogui
 
  
# a alert displays with a ok button
# on it
pyautogui.alert(text='', title='', button='OK')
 
# a confirm dialog box appears with ok
# and cancel buttons on it
pyautogui.confirm(text='', title='', buttons=['OK', 'Cancel'])
 
# a prompt displays that lets you to
# write something
pyautogui.prompt(text='', title='' , default='')
 
# a password field appears with entry box
# to fill a password
pyautogui.password(text='', title='', default='', mask='*')

Producción:

Tomar capturas de pantalla

Finalmente, veríamos cómo tomar una captura de pantalla usando pyAutoGUI usando la función .screenshot(). Comenzaríamos importando el módulo pyAutoGUI. Luego usamos la función .screenshot() que toma una captura de pantalla de la ventana actual y la almacena como «123.png» en el mismo directorio, para almacenar en otro directorio, debemos proporcionar su ruta relativa o absoluta. La implementación sería la siguiente:

Sintaxis: pyautogui.screenshot()

Parámetros: la función tiene un parámetro opcional que es la ruta del archivo junto con el nombre del archivo en el que se debe almacenar la captura de pantalla.

Tipo de devolución: la función no devuelve nada, pero toma una captura de pantalla y la almacena en la ruta que se pasa dentro de ella como un parámetro.

A continuación se muestra la implementación:

Python3

import pyautogui
 
# takes a screenshot of the present
# window and stores it as "123.png"
pyautogui.screenshot("123.png")

Producción:

Publicación traducida automáticamente

Artículo escrito por saikatsahana91 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *