Télécharger ses mouvements de compte LCL au format QIF

Depuis quelques jours, le site https://particuliers.secure.lcl.fr du crédit Lyonnais a mis en place un login avec un tableau de chiffres que l’on doit cliquer, qui sont répartis de façon aléatoire.

Exemple 1:

http://ompldr.org/vYXZ4dg.png

Exemple 2:

http://ompldr.org/vYXc4ag.png

Si on examine attentivement les deux images avec Gimp (par exemple) on remarquera que non seulement les chiffres ne sont pas placés au même endroit, mais qu’en plus leurs position par rapport aux fond bleu peuvent varier (dans cet exemple : 1 pixel en hauteur).

Comme j’aime les défis et aussi le web scraping et que je me met au langage de programmation python, je me suis décidé à me lancer dans l’aventure.

Ma première idée : sikuli permet de faire ce genre de chose, mais cela est contraignant : on doit avoir un navigateur ouvert sur la page et de plus la souris est réquisitionnée le temps de l’opération. Donc, non cette solution ne me convenait pas.

J’ai donc cherché des pistes pour faire du template matching à la manière de sikuli, mais cette fois en scriptant.

Avec les modules python PyQt4 et webkit, il est possible de piloter un navigateur avec accès au DOM, javascript, cookies, user-agent… Et on peut choisir d’afficher ou non la fenêtre du navigateur. (pour faire simple, on code son navigateur à sa sauce, et on implémente ce dont on a besoin).

Après de nombreuses recherches sur le web, j’ai trouvé le module spynner qui permet de faire cela de façon relativement facile.

Reste la partie image-processing, j’ai pour cela choisit l’excellent module PIL associé à numpy pour gérer des tableaux multidimensionnels.

Voici mon process :

  • on se rend sur la page de login
  • on crée un screenshot de la page
  • on découpe le screenshot pour ne garder que le tableau vu en exemple
  • on passe tous les pixels non blancs en noir pour simplifier la recherche de motifs
  • on compare les petites images des numéros (crées avec Gimp) avec le tableau pour chaque numéro du code personnel
  • si ça match, on récupère les abscisses et ordonnées et on lance le code javascript ad-hoc
  • on valide (submit)

A présent, nous sommes logués, et le code devient plus traditionnel : recherches XPath, manipulation du DOM

Cela représente un travail d’une dizaine de jours (pas à temps complet) ce qui a permis de m’inculquer quelque peu la syntaxe de python et de découvrir de belles possibilités de manipulation d’images, ce qui m’était inconnu jusqu’à lors.

Ce script est librement téléchargeable et largement commenté.

Ce script n’a pour le moment pas été testé avec un autre compte que le miens, merci de me remonter si ça fonctionne ou non pour vous et vos éventuels message d’erreurs, merci.

Install sous ubuntu :

sudo easy-install spynner
sudo apt-get install python-qt4
wget http://www.sputnick-area.net/scripts/LCL-dl-QIF/LCL-dl-QIF_current.tar.bz2
tar xjf LCL-dl-QIF_current.tar.bz2
cd LCL-dl-QIF
chmod +x LCL-dl-QIF.py
./LCL-dl-QIF.py