Bot en Python 3 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()

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()
  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:

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: