viernes, 8 de diciembre de 2017

¿Múltiples clicks con el mouse? fácil con xdotool



Hola amigos, hoy os traigo un pequeño programa o mejor dicho un script con el cual podréis posicionar donde queráis de la pantalla el puntero del ratón y hacer varios clicks, así como abrir aplicaciones y escribir en ellas con una concatenación de funciones. Mejor os lo enseño con ejemplos y os quedará claro.


La aplicación o script se llama xdotool, está en los repositorios, así que os la podéis instalar con el siguiente comando:

$ sudo apt-get install xdotool

Bien, una vez instalada abrimos un terminal de comandos y con el comando man vereis el manual de esta aplicación:

$ man xdotool

Como veis hay muchas opciones, os voy a enseñar unas de básicas y a partir de ahí podréis hacer combinaciones de todas ellas.

Empezaremos por ubicar el puntero del ratón en una posición concreta de la pantalla y daremos un click con el botón izquierdo del ratón, pero todas estas acciones sin tocar físicamente el mouse, todo por comandos. Bonito verdad? Vamos a ello, escribiremos lo siguiente:

$ xdotool mousemove 0 0

Siempre ejecutaremos la aplicación xdotool y luego con la opción mousemove el puntero del ratón nos aparecerá en las coordenadas X e Y establecidas a continuación solo separado por espacios, en mi caso he escrito X=0 e Y=0, el origen de coordenadas en la pantalla se encuentra en la esquina superior izquierda.
Así que el puntero se nos posicionará en la esquina superior izquierda. Deberíais de tener claro cual es la resolución de vuestra pantalla, en mi caso es 1920x1080, o sea X=1920 e Y=1080, con eso ya tenemos claras las coordenadas de la esquina inferior derecha.
 
$ xdotool click 1

Con la opción click simularemos un click del ratón, con el número 1 definimos el botón izquierdo, con el número 2 definimos la pulsación de la ruedecilla, con el número 3 definimos el botón de la derecha, con el número 4 definimos el rodar hacia arriba la ruedecita y con el número 5 definimos rodar hacia abajo la ruedecita del ratón.
Para simular varias pulsaciones deberemos escribir varias veces la opción click.
Ejemplo:

$ xdotool click 1 click 1 click 1 click 3

Pulsará 3 veces el botón de la izquierda y una vez el botón de la derecha.

También podemos escribir todo lo anterior en una misma instrucción:

$ xdotool mousemove 30 50 click 1 click 1 click 1 click 3

En mi caso, que estoy utilizando Ubuntu con la interfaz de escritorio Unity, con esas coordenadas se me posiciona el puntero encima del botón del tablero y lo clickeo 3 veces con el botón izquierdo del ratón y una vez con el botón derecho.
Bonito, ¿a que si? Seguro que ya os están viniendo mil ideas a la cabeza.
Pero aún no hemos terminado.

$ xdotool key ctrl+alt+t sleep 2 type 'Ubuntu el blog mas cool'
Con esta instrucción el resultado es que se nos abre un nuevo terminal de comandos y nos escribe el texto Ubuntu el blog mas cool.
La opción key nos simula la combinación de teclado Ctrl Alt T y como resultado se nos ejecuta un nuevo terminal de comandos, con sleep 2 le damos una espera de 2 segundos para que le de tiempo a abrirse el terminal y la opción type nos escribe el texto que está entre comillas simples dentro del terminal que acabamos de abrir porque es el que está activo.

Os aconsejo que cuando queráis dar muchas opciones en una misma línea de instrucción lo escribáis en un script y en diferentes lineas, por que puede dar errores de interpretación.

Ahora ejecutaremos una aplicación de ventana gráfica como por ejemplo el editor gedit y escribiremos en él unas palabras:

$ xdotool exec gedit steep 2 type 'Ubuntu el blog mas cool con diferencia'

Os debería de ejecutar el editor gedit esperar 2 segundos y escribir el texto  que hay entre las comillas dentro del editor gedit. Pero no acaba de hacerlo, se confunde con las opciones, como os he dicho lo mejor es que lo escribáis en un script en diferentes lineas de programación y todo quedará clarito. Y es lo que haremos a partir de ahora:

$ sudo nano script1.sh

Editaremos un nuevo archivo con el editor nano y será un script con el nombre script1.sh

Dentro escribiremos este código:
###############################

#!/bin/bash

xdotool exec gedit
xdotool sleep 2
xdotool type 'Ubuntinux el mejor blog'

###############################

Presionaremos Ctrl+X guardaremos y saldremos a la terminal, ahora le cambiamos los permisos para que sea ejecutable para todo el mundo:

$ sudo chmod +x script1.sh

Y ahora lo ejecutaremos:

$ ./script1.sh

Como veis funciona perfectamente.

Queréis mas? Seguro que si.

Ahora imaginaros que tenéis varias ventanas abiertas con distintas aplicaciones, y una de ellas es la aplicación de edición de imágenes gimp con un archivo abierto Sin nombre y ya tenéis elegida una herramienta de dibujo como un lápiz. Queremos seleccionarla y dibujar 2 lineas en ella. Vamos a crear el script, ponedle vosotros mismos el nombre que queráis:

###############################

#!/bin/bash

xdotool search "Sin nombre" windowactivate --sync
xdotool mousemove --window %1 200 100 sleep 1 mousedown 1 sleep 1
xdotool mousemove_relative --sync 100 100 sleep 1 mouseup 1 sleep 1
xdotool mousemove_relative --sync 0 -100 sleep 1 mousedown 1 sleep 1
xdotool mousemove_relative --sync 100 100 sleep 1 mouseup 1 sleep 1

###############################

Presionaremos Ctrl+X guardaremos y saldremos a la terminal, ahora le cambiamos los permisos para que sea ejecutable para todo el mundo:

$ sudo chmod +x script1.sh

Y ahora lo ejecutaremos:

$ ./script1.sh

Search busca el archivo sin nombre y windowactivate activa  la ventana donde se encuentra el archivo, sync espera hasta que se haya activado la ventana, mousemove --window %1 200 100, el puntero se mueve a la posición X=200 Y=100 de la ventana activa, sleep 1 espera 1 segundo, mousedown 1 queda presionada la tecla izquierda del mouse hasta nueva orden, sleep 1 espera 1 segundo, mousemove_relative --sync 100 100 mueve el puntero X=100 Y=100 respecto la última posición del mouse (coordenadas relativas), mouseup 1 deja de presionar el botón izquierdo del mouse. Las demás instrucciones son simples repeticiones. El resultado, el siguiente:



A partir de aquí os lo dejo a vosotros, con el comando man xdotool veréis todas las demás opciones.

Seguro que se os ha abierto la bombilla de las ideas y ya estáis pensando en hacer un script repetitivo para clickear muchas veces encima de un enlace de imagen, sobretodo los usuarios de juegos web.

Espero os sirva de ayuda. Bon apetit.


1 comentario:

  1. Impresionante !!!
    Gran descubrimiento la aplicación xdotool.
    GRACIAS !!

    ResponderEliminar

Gracias por participar en este blog.