Cet article a pour but de décrire comment automatiser des appuis de touches dans une application.
En effet, on me demande souvent de faire des actions répétitives sur des sites (toutes les heures).
Or comme il se trouve que j’ai un RaspberryPI qui tourne en permanence (comme beaucoup) il pourrait très bien se saisir de cette tâche.
Le projet
Le but du projet est d’effectuer les étapes suivantes toutes les 45 minutes :
- Lancer le focus sur l’application Mozilla déjà lancée
- Ouvrir une nouvelle fenêtre de navigation dans un nouvel onglet (pour ne pas perturber les fenêtres déjà actives)
- Lancer un site web dans la barre d’adresse
- Lancer un deuxième site web dans la même barre d’adresse
- Refermer l’onglet
Les outils de simulation des touches
Nous utiliserons comme application xdotool qui est assez complet car il permet non seulement de simuler les touches mais également d’activer des fenêtres ou simuler la souris. Personnellement j’évite d’utiliser la souris, car elle est trop liée aux positionnements des fenêtres. On privilégiera donc les raccourcis claviers qui ont beaucoup plus de chance de réussir si la fenêtre est active.
Installation de xdotool
On est sur de l’installation classique.
# Installation du paquet de configuration sudo apt-get update sudo apt-get upgrade sudo apt-get install xdotool
Utilisation de xdotool
Les commandes de base qui vont nous intéresser sont les suivantes :
# Pour saisir une touche de fonction (ctrl + t) xdotool key ctrl+t # Pour saisir du texte xdotool type 'Mon texte à saisir'
Création du fichier Batch de séquencement des touches
Voici le fichier batch qui va simuler la saisie clavier correspondant aux différentes étapes du projet, il a été écrit dans un fichier /home/pi/SimuleClavier.sh avec nano :
nano /home/pi/SimuleClavier.sh
Saisir les lignes suivantes :
## ===================================================================== ## === SimuleClavier.sh à mettre en cron /*45 (toute les 45 minutes) == ## ===================================================================== #!/bin/bash sleep 5s # Activation de Mozilla # Le navigateur doit déjà être lancé WID=`xdotool search "Mozilla Firefox" | head -1` xdotool windowactivate --sync $WID sleep 2s # Nouvel Onglet dans mozilla xdotool key ctrl+t sleep 2s # Adresse du site à lancer xdotool key alt+d xdotool type 'http://www.mon_site.fr/bidule.php?pseudo=Le_Pseudo_De_Cnx' xdotool key Return sleep 10s # Autre site à lancer xdotool key alt+d xdotool type 'http://www.mon_site_2.fr/redirection.php' xdotool key Return sleep 20s # Fermeture de l'onglet xdotool key ctrl+w
Quittez nano à l’aide de CTRL+X et Y
Remarque
Pour les sites c’est ce que vous voulez mais il est parfois intéressant de voir comment ils fonctionnent. Dans mon cas, le passage du pseudo en paramètre permet d’éviter de le saisir dans la fenêtre de connexion.
Rendez ensuite votre script exécutable à l’aide de l’instruction suivante :
chmod 777 /home/pi/SimuleClavier.sh
Automatisation de la tâche
Nous utiliserons cron via l’installation suivante :
sudo apt-get install gnome-schedule
Il faudra ensuite créer une tâche planifiée. Vous pouvez le faire par l’interface graphique ou en ligne de commande.
Méthode ligne de commande
crontab -e
Choisir nano. Ce qui va lancer le fichier de configuration avec nano. Il vous faudra rajouter le dernière ligne pour lancer le script toutes les 45 minutes
# Output of the crontab jobs (including errors) is sent through # email to the user the crontab file belongs to (unless redirected). # # For example, you can run a backup of all your user accounts # at 5 a.m every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # For more information see the manual pages of crontab(5) and cron(8) # # m h dom mon dow command */45 * * * * /home/pi/SimuleClavier.sh
Quittez nano à l’aide de CTRL+X et Y
Méthode graphique
Suite à l’installation une nouvelle icône « Scheduled tasks » est présente dans le menu démarrer :
En cliquant dessus une fenêtre de paramétrage s’ouvre
Créez une nouvelle tâche et saisissez comme commande /home/pi/SimuleClavier.sh puis Xapplication. Choisissez ensuite en mode « Advanced » –> */45 qui correspond à 45 minutes.
Ça y est votre tâche est planifiée pour s’exécuter toutes les 45 minutes.
Pour aller plus loin
Il peut être intéressant de travailler en tâche de fond le lancement des sites web sans interactions graphiques. On peut pour cela utiliser un script python qui ressemblerait à cela en Python version 2 en version 3 c’est différent :
#!/usr/bin/env python import urllib f = urllib.urlopen("http://www.mon_site.fr/bidule.php?pseudo=Le_Pseudo_De_Cnx") s = f.read() print(s)
Sources
- http://www.memoclic.com/593-firefox/9114-raccourcis-clavier-firefox.html
- http://xmodulo.com/simulate-key-press-mouse-movement-linux.htm
- https://www.semicomplete.com/projects/xdotool
- https://www.raspberrypi.org/documentation/linux/usage/cron.md
A lire sur : Framboise 314, le Raspberry Pi à la sauce française…. http://www.framboise314.fr/automatisation-simuler-les-appuis-de-touches-sur-le-clavier/