Bot en Python 3 para principiantes: automatiza tu ordenador con clics y teclado
El objetivo de este tutorial es crear varios scripts para automatizar tareas mediante clics del ratón o mediante la lectura y pulsación de teclas en Python 3.
Puedes descargar el repositorio con el código de ejemplo en https://github.com/al118345/Ejemplo_bot_python.
Usa la automatización con responsabilidad
Los ejemplos están pensados para tareas de productividad en tu propio equipo: repetir clics, comprobar coordenadas y entender cómo funcionan los escuchadores de teclado. Un escuchador de teclado puede capturar información sensible (contraseñas, mensajes, datos bancarios), así que nunca debe usarse en ordenadores de otras personas, sesiones compartidas o sistemas donde el usuario no haya dado su permiso explícito. Hacerlo puede ser delito.
Si la automatización tiene que interactuar con una aplicación web, suele ser mejor usar una API controlada o una herramienta de pruebas. Este artículo complementa las guías sobre llamadas a APIs desde Angular y Google reCAPTCHA en Angular, donde la automatización y los mecanismos de protección aparecen desde el lado web.
Instalación
Para instalar este proyecto lo único que necesitarás es tener la librería pynput en tu entorno. Para ello ejecuta el siguiente comando:pip install pynputEjemplo1. Mostrar la posición dónde se ha realizado click
El siguiente código simplemente muestra por terminal las coordenadas dónde ha realizado click el usuario.# -*- coding: utf-8 -*-
from pynput.mouse import Listener
#función para obtener las coordenadas del lugar de la pantalla dónde se ha pulsado
def on_click(x, y, button, pressed):
print('({0},{1}) '.format(
'Pressed' if pressed else 'Released',
(x, y)))
if not pressed:
# Stop listener
return False
#bucle for para realizar la tarea durante 4 ocasiones
cont = 0
while cont < 4:
cont = cont +1
print( 'Click número ' + str(cont))
# evento para captar la posicion del click
with Listener(
on_click=on_click,
) as listener:
listener.join() Con el objetivo de realizar un ejemplo sencillo hemos decidido crear un contador para captar el click únicamente el número de ocasiones que nosotros deseemos (en el ejemplo son 4). Durante estás 4 iteraciones, hemos asociado una función que he llamado on_click al evento on_click (sí, no he sido original y algo repetitivo) tal cómo se observa a continuación.
# evento para captar la posicion del click
with Listener(
on_click=on_click,
) as listener:
listener.join() Esta función únicamente muestra las coordenadas donde se ha realizado click, cómo se observa en el siguiente código.
#función para obtener las coordenadas del lugar de la pantalla dónde se ha pulsado
def on_click(x, y, button, pressed):
print('({0},{1}) '.format(
'Pressed' if pressed else 'Released',
(x, y)))
if not pressed:
# Stop listener
return False Podéis descargar el repositorio con el código de ejemplo del tutorial en la url https://github.com/al118345/Ejemplo_bot_python/blob/main/ejemplo_posicion.py y consultar el siguiente video con la explicación del script:
Ejemplo2. Presionar las coordenadas obtenidas del ejemplo 1
Una vez sabemos qué coordenadas dónde presionar, podemos crear el siguiente script para que pulse las zonas deseadas. El código es el siguiente:# -*- coding: utf-8 -*-
from pynput.mouse import Button, Controller
import time
mouse = Controller()
def click_raton_posicion (x,y):
mouse.position = (x, y)
print('Now we have moved it to {0}'.format(
mouse.position))
# Press and release
mouse.press(Button.left)
mouse.release(Button.left)
time.sleep(10)
click_raton_posicion(626.6600341796875, 181.1196746826172)
Cómo se puede analizar, lo más importante es la función click_raton_posicion qué, dadas una coordenadas, desplaza el ratón va a dicho lugar y presiona el botón izquierdo y lo suelta. Posteriormente realizó una pausa de 10 segundos.
Podéis descargar el repositorio con el código de ejemplo del tutorial en la url https://github.com/al118345/Ejemplo_bot_python/blob/main/ejemplo_ejecucion_bot_click.py y consultar el siguiente video con la explicación del script:
Ejemplo 3. Almacenar todas las teclas pulsadas por tu ordenador durante la ejecución del programa en un fichero de texto.
Básicamente la tarea que vamos a realizar es recolectar todas las teclas pulsadas en tu ordenador y almacenar en un fichero de texto en el momento que detengamos el programa. EL código es el siguiente:# -*- coding: utf-8 -*-
from pynput import keyboard
#variable global dónde almacenamos el texto tecleado
texto_presionado = ""
#almacenamos la tecla pulsada.
def on_press(key):
global texto_presionado
try:
texto_presionado = texto_presionado + '{0}'.format(
key.char)
print('{0}'.format(
key.char))
print(texto_presionado)
except AttributeError:
texto_presionado = texto_presionado + '{0}'.format(
key)
print(texto_presionado)
print('{0}'.format(
key))
#bucle que se encarga de recibir las teclas pulsadas
try:
# Collect events until released
with keyboard.Listener(
on_press=on_press,
) as listener:
listener.join()
# ...or, in a non-blocking fashion:
listener = keyboard.Listener(
on_press=on_press)
listener.start()
#excepción paara cundo termina el programa.
except KeyboardInterrupt:
text_file = open("teclas_presionadas", "w")
#almacenamos la información en un fichero.
text_file.write(texto_presionado)
#cerramos el fichero.
text_file.close()
La primera del código más importante es el listener que mostramos a continuación. Es el encargado de invocar el método on_press cuando se produzca la presión sobre el teclado. # Collect events until released
with keyboard.Listener(
on_press=on_press,
) as listener:
listener.join()
# ...or, in a non-blocking fashion:
listener = keyboard.Listener(
on_press=on_press)
listener.start() También es importante el siguiente try: except: ya que es el encargado de realizar el almacenamiento de la información recopilada en un documento de texto.
try:
...
except KeyboardInterrupt:
text_file = open("teclas_presionadas", "w")
#almacenamos la información en un fichero.
text_file.write(texto_presionado)
#cerramos el fichero.
text_file.close() Por último, la función on_press va almacenando los caracteres presionados siempre que sea posible. Para ello utilizamos una cadena de texto almacenada de forma global.
def on_press(key):
global texto_presionado
try:
texto_presionado = texto_presionado + '{0}'.format(
key.char)
print('{0}'.format(
key.char))
except AttributeError:
texto_presionado = texto_presionado + '{0}'.format(
key)
print('{0}'.format(
key)) Podéis descargar el repositorio con el código de ejemplo del tutorial en la url https://github.com/al118345/Ejemplo_bot_python/blob/main/ejemplo_lectura_teclado_a_fichero.py y consultar el siguiente video con la explicación del script: