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.
Au sommaire :
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=<code>xdotool search "Mozilla Firefox" | head -1</code> 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
[stextbox id= »info » caption= »Remarque »]La touche alt+d permet de sélectionner la barre d’adresse du navigateur. En effet après chaque lancement de site la barre d’adresse perd le focus.
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.
[/stextbox]
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)
Bonsoir.
Bonne intro à xdotools, mais je ne suis pas sûr de comprendre l’intérêt par rapport à un curl ou wget (éventuellement en changeant le user-agent) associé à une crontab.
D’autant plus qu’avec la méthode de l’article, la machine est inutilisable pendant ce temps : si on fait autre chose Firefox va prendre tout seul le focus…
Bonjour Damien,
J’adore les commentaires constructifs… et c’en est un ! Je suis d’accord avec toi. L’outil est en fait pour aider mes enfants à voter automatiquement sur des sites de jeux pour gagner des points, mais chuuut. Et les sites font des passages de jetons (ouverture de session) via PHP. Je ne suis pas persuadé qu’un curl sache garder facilement ce jeton. J’ai essayé avant avec urllib en python et cela n’a pas fonctionné. Je n’avais pas trop le temps de creuser plus loin, la simulation du clavier (et souris) même si elle bloque le PC reste une valeur sûr et rapide à mettre en place, même par un enfant. Surtout si les sites utilisent des plugins. Et l’outil peut être utilisé à bien d’autres fins. Cela dit je vais me pencher plus en avant sur curl (je l’avais oublié celui là !).
Ha oui, je comprend mieux.
Je sais que curl est capable d’enregistrer des cookies et de les réutiliser (pratique pour les jetons de sessions notamment), comme n’importe quel naviguateur.
Par contre effectivement, ce genre de site/jeu utilise souvent des plugins, et là je pense qu’on atteind les limites de curl, et que rien ne vaut un clavier/souris (humain ou simulé 🙂 )