Publié le 21 décembre 2016 - par

Automatisation : Simuler les appuis de touches sur le clavier

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.

NIVEAU_avancé

Cliquez pour avoir la définition des niveaux.

Le projet

Le but du projet est d’effectuer les étapes suivantes toutes les 45 minutes :

  1. Lancer le focus sur l’application Mozilla déjà lancée
  2. Ouvrir une nouvelle fenêtre de navigation dans un nouvel onglet (pour ne pas perturber les fenêtres déjà actives)
  3. Lancer un site web dans la barre d’adresse
  4. Lancer un deuxième site web dans la même barre d’adresse
  5. 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 &quot;Mozilla Firefox&quot; | 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

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.

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

Share Button

3 réflexions au sujet de « Automatisation : Simuler les appuis de touches sur le clavier »

  1. Damien

    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…

    Répondre
    1. François-Paul Ivart Auteur de l’article

      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à !).

      Répondre
      1. Damien

        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é 🙂 )

        Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP * Time limit is exhausted. Please reload CAPTCHA.