Guía del módulo de teclado de Python

En esta guía, veremos el módulo de teclado experimental en Python y cómo automatizar fácilmente la entrada y las pulsaciones de teclas.

Introducción

Python es uno de los lenguajes más adecuados para la automatización de tareas. Ya sea que se trate de web scraping repetible (ético) después de un período de tiempo, iniciar algunos programas en el inicio de una computadora o automatizar el envío de correos electrónicos mundanos, Python tiene muchos módulos que hacen su vida más fácil.

Uno de estos es un módulo llamado keyboard, y toma el control total de su teclado. Con este módulo, puede escribir cualquier cosa, crear teclas de acceso rápido, crear abreviaturas, bloquear el teclado, esperar la entrada, etc.

En esta guía, veremos cómo configurar y usar el módulo keyboard en Python.

{.icon aria-hidden=“true”}

Nota: Las aplicaciones que funcionan con la automatización de procesos similares a los humanos deben desarrollarse de manera ética y responsable. El módulo keyboard está diseñado para ser muy observable y, por lo tanto, lo hace desalentador y transparente si alguien lo usa para crear registradores de pulsaciones de teclas o bots maliciosos.

Instalación del módulo keyboard

{.icon aria-hidden=“true”}

Nota: La versión de Python utilizada en esta guía es 3.8. Sin embargo, el módulo keyboard puede funcionar tanto con Python 2.x como con Python 3.x.

Si está usando Linux, para usar esta biblioteca, debe instalarla como root. Si no lo hace, obtendrá un:

1
ImportError: You must be root to use this library on linux.

Además, al ejecutar su script, debe ejecutarlo con privilegios de root:

1
2
$ sudo pip3 install keyboard
$ sudo python3 my_script.py

En Windows y MacOS, ya que los privilegios funcionan de manera muy diferente, puede instalarlo simplemente a través de pip y ejecutar los scripts:

1
2
$ pip install keyboard
$ python my_script.py

Nota: Para MacOS, es posible que deba permitir que la Terminal u otras aplicaciones cambien el estado de su máquina, por ejemplo, al escribir. También tenga en cuenta que a partir de septiembre de 2021, la biblioteca aún es experimental en MacOS.

Las funciones del módulo keyboard

Hay muchas funciones en este módulo que se pueden usar para simular acciones de teclado.

  • keyboard.write(mensaje, [retraso]) - escribe un mensaje, con o sin retraso.
  • keyboard.wait(key) - bloquea el programa hasta que se presiona la key. La clave se pasa como una cadena ('espacio', 'esc', etc.)
  • keyboard.press(key) - presiona una tecla y mantiene hasta que se llama a la función release(key).
  • keyboard.release(key) - libera una tecla.
  • keyboard.send(key) - presiona y suelta una tecla.
  • keyboard.add_hotkey(tecla de acceso rápido, función) - crea una tecla de acceso rápido que, cuando se presiona, ejecuta una función.
  • keyboard.record(key) - registra la actividad del teclado hasta que se presiona key.
  • keyboard.play(recorded_events, [speed_factor]) - reproduce eventos grabados con la función keyboard.record(key), con un speed_factor opcional.

Sin embargo, revisaremos todos estos, aquí hay un ejemplo rápido:

1
2
3
>>> import keyboard
>>> keyboard.write("Hello")
>>> Hello

El mensaje Hola aparece en la pantalla, en la terminal, como si lo hubieras escrito tú. Puede automatizar un comando muy fácilmente y crear un alias de tecla de acceso rápido para él. Aquí hay un ejemplo (crudo) de cómo salir de Python REPL, escribir un comando curl y ejecutarlo:

1
2
3
4
5
6
>>> import keyboard
>>> keyboard.write("exit()"); keyboard.send("enter"); keyboard.write("curl https://www.google.com"); keyboard.send("enter");
>>> exit()
curl https://www.google.com
$ curl https://www.google.com
<!doctype html><html itemscope=""...

Funciones write() y wait() de keyboard

El comando write() escribe un mensaje, como hemos visto antes, con un retraso opcional en el inicio. Si no se establece ningún retraso, la escritura es instantánea. Está muy bien combinado con la función wait(), que espera que se presione una determinada tecla.

Por ejemplo, podemos crear una macro improvisada, vinculada a, por ejemplo, 1, que responde a esa entrada con un nuevo mensaje. Tenga en cuenta que hay una forma real de crear teclas de acceso rápido en lugar de esto, que veremos más adelante.

Crearemos un bucle True infinito para verificar la tecla que se está presionando, y puede ejecutar el script en segundo plano:

1
2
3
4
5
import keyboard

while True:
    keyboard.wait("1")
    keyboard.write("\n The key '1' was pressed!")

Nota: Los caracteres especiales no son compatibles con esta función, por lo que si agrega, diga !, recibirá una excepción StopIteration.

funciones pulsar(), liberar() del teclado {#funciones de liberación de prensa del teclado}

Dado que es difícil simular press() y release() para que las acciones sean visibles, también veremos record() y play() en acción.

La función press() presiona una tecla y la suelta cuando llamas release() en la misma tecla. Tenga en cuenta que no puede dormir () durante algún tiempo para simular mantener presionada una tecla:

1
2
3
4
5
6
>>> import keyboard
>>> from time import sleep
>>> keyboard.press("a")
>>> sleep(1)
>>> keyboard.release("a")
>>> a

Sin embargo, puede mantener presionadas algunas teclas especiales, como [MAYÚS] o [CTRL] de esta manera:

1
2
3
4
5
>>> keyboard.press("shift")
>>> keyboard.write("lowercase")
>>> keyboard.release("shift")

>>> LOWERCASE

funciones record() y play() del teclado

No siempre se trata de ingresar nuevas claves; a veces, le gustaría grabar lo que está sucediendo y reproducirlo. Tenga en cuenta que necesitará privilegios de administrador para registrar cualquier entrada como esta, ya que la tecnología se puede usar fácilmente para crear registradores de teclas.

La función record() acepta una tecla de activación, hasta la cual graba, y devuelve una secuencia de eventos de tipo KeyboardEvent. A continuación, puede introducir esta secuencia de eventos en la función play(), que los reproduce fielmente, con un argumento speed_factor opcional que actúa como un multiplicador de la velocidad de los eventos originales:

1
2
3
import keyboard
recorded_events = keyboard.record("esc")
keyboard.play(recorded_events)

Si vamos a imprimir los recorded_events, se verían como:

1
KeyboardEvent(w up), KeyboardEvent(o down), ...]

Los efectos de estos métodos se ven mejor como un gif o se recrean en su máquina. Por ejemplo, una secuencia de escribir un mensaje, borrarlo y escribir uno diferente en su lugar:

Función send() del teclado ### {#keyboardssendfunction}

La función send() abarca press() y release() juntas, y se usa para teclas individuales, a diferencia de write(), que se usa para oraciones completas:

1
2
3
4
5
6
7
8
import keyboard

recorded_events = keyboard.record("s")

keyboard.send("w")
keyboard.send("a")

keyboard.play(recorded_events)

Una vez que se presiona s, se reproducen las teclas w y a.

La función press() también puede aceptar combinaciones de teclas presionadas. Puede enviar una combinación de "ctrl+shift+s" por ejemplo y debería aparecer el diálogo para guardar un archivo, si está en una aplicación que admite esa operación:

1
2
3
4
5
6
7
import keyboard

while True:
    keyboard.wait("s")
    keyboard.press("ctrl+shift+s")
    # Or for MacOS
    keyboard.press("command+shift+s)

Sin embargo, esta no es la forma correcta de agregar teclas de acceso rápido. Más bien, puedes usar la función add_hotkey().

Función add_abbreviation() del teclado ### {#keyboardsadd_abbreviationfunction}

La función add_abbreviation() es bastante ingeniosa, ya que le permite definir abreviaturas para entradas largas y reemplaza las versiones abreviadas con las versiones completas guardadas.

Por ejemplo, similar a cómo los servicios como Google guardan su correo electrónico para la mayoría de los formularios de entrada, puede crear su propia abreviatura y activarla a través de [SPACE]:

1
2
>>> import keyboard
>>> keyboard.add_abbreviation("@", "[correo electrónico protegido]")

Mientras se ejecuta, si escribe @ seguido de [SPACE], la entrada de formato largo reemplazará la @ escrita.

Función add_hotkey() del teclado ### {#keyboardsadd_hotkeyfunction}

La función add_hotkey() acepta una tecla de acceso directo que le gustaría guardar, o una combinación de teclas y una función. Aquí es fácil pasar funciones lambda anónimas, aunque también puede agregar funciones con nombre.

Por ejemplo, agreguemos una tecla de acceso rápido para CTRL+j, que activa una función lambda que registra esto:

1
2
3
import keyboard

keyboard.add_hotkey("ctrl+alt+j", lambda: print("ctrl+alt+j was pressed"))

La tecla de acceso rápido, ctrl+alt+p, se guarda y cuando presiona esta combinación, debería ver la salida de la lambda.

Conclusión

El módulo keyboard es una biblioteca liviana y simple que se usa para simular pulsaciones de teclas y automatización simple en Python. No tiene muchas funciones, pero se puede usar para automatizar algunas de las tareas que podría estar realizando en su trabajo diario, o simplemente para divertirse un poco.

Un módulo más maduro y poderoso que se puede usar como alternativa es pynput.

Licensed under CC BY-NC-SA 4.0