Bot en python3 para principiantes, cómo conseguir que tu ordenador trabaje sólo.

El objetivo de este tutorial es la creación de varios scripts para la automatización de tareas a través de clicks o para la lectura/pulsado de teclado en Python3.

Podéis descargar el repositorio con el código de ejemplo del tutorial en la url https://github.com/al118345/Ejemplo_bot_python.

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 pynput

Ejemplo1. 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()

Básicamente, tenemos un contador para que realice esta acción el número de ocasiones que nosotros deseemos (en el ejemplo son 4). durante estás 4 iteraciones, hemos asociado una función on_click al evento on_click (sí, no he sido original) 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()
  constructor() { }

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:

Ejemplo3. 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: