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

7 réponses à “Télécharger ses mouvements de compte LCL au format QIF”

  1. Uggy dit :

    Joli travail..
    Si j’avais un peu de temps, je tenterais le porter le principe vers ma banque (pas LCL)..
    PS: il y a le .swp dans le .tar.bz2 ;)

  2. admin dit :

    @Uggy,

    Merci !

    Pour le .swp, il a été retiré.

  3. jigso dit :

    Regarde du coté de weboob ( http://weboob.org/ ), il me semble que ça existait déjà…

  4. admin dit :

    @jigso,
    Ma première release date du 28 octobre, j’ai contacté la team weboob le 29 octobre, ils ont depuis créé des patchs dès le 30 octobre. Avant cela, le clavier virtuel n’était pas encore implémenté.

    commit 07d723368550b94202804aa2cc29c6242fbde26e

    C’est moi qui a inspiré le premier backend LCL (en Perl à l’époque), voir les 3 derniers posts de dlfp.

  5. n3o51 dit :

    salut sput :) bonjour j’ai pas saisi a quoi serre ton script python …

    Je suis tomber la en cherchant un moyen de me connecter a lcl automatiquement via xdotool et un script bash … Voila si tu as une idée :D

  6. n3o51 dit :

    d’ailleurs j’ai une erreur sur ton script

    Traceback (most recent call last):
    File "LCL-dl-QIF.py", line 192, in
    ).format('0', j)
    ValueError: zero length field name in format

  7. admin dit :

    @n3o51

    Ce script sert à récupérer les mouvements de comptes dans un format standard.

    Pour te connecter à LCL automatiquement en mode « human readable », tu peux installer weboob, l’avantage c’est que ya plus de monde sur ce projet que le miens ;)

    Il faut configurer ton compte boobank, puis

        boobank -q  history -n 500 @lcl
        boobank -q  ls @lcl
    

Laisser un commentaire