Forum général.cherche-logiciel Comment faire pour remplir automatiquement un formulaire web

Posté par . Licence CC by-sa
Tags : aucun
1
2
avr.
2013

Bonjour,
j'ai
comme FAI RENATER, je suis en résidence universitaire et j'ai une page
de connexion pour accéder à ma connexion. J'aimerai me connecter
automatiquement (toutes les 4h) et/ou quand j'allume mon pc,
automatiquement.
Quels outils me permettront de remplir automatiquement un formulaire
(d'une page web) et de simuler la validation sur un navigateur web?
Merci d'avance.

  • # Tests unitaires

    Posté par (page perso) . Évalué à 1.

    Des outils de tests unitaires comme Selenium peuvent répondre à ton besoin.

  • # curl

    Posté par (page perso) . Évalué à 5.

    un script avec curl en utilisant les options relatives à l'user agent, aux cookies et éventuellement au ssl.

    • récupération de la page de login

    • grep du source du form avec une regex pour trouver l'id de session et d'autres valeurs à passer en POST à la page qui traîte les données saisies dans le form (Firebug et son onglet réseau est très pratique pour voir le source du POST)

    • envoie des données vers cette page

    wind0w$ suxX, GNU/Linux roxX!

    • [^] # Re: curl

      Posté par . Évalué à 1.

      je connaissais un peu curl (de nom surtout, mais ne me suis jamais utilisé). J'essai tout d'abbord mechanize qui parrait être une super solution.

  • # Perl et Mech

    Posté par . Évalué à 10. Dernière modification le 02/04/13 à 23:57.

    Je te propose Mech, alias WWW::Mechanize, qui correspond à tes besoins.

    Par exemple, un simple script pour se connecter à un FreeWifi (lancé automagiquement par mon gestionnaire de connexion). Il devrait t'être très facile de l'adapter.

    #!/usr/bin/perl
    
    use strict;
    use WWW::Mechanize;
    
    my $bot = WWW::Mechanize->new(
                  agent => 'Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.0.6) Gecko/2009020619 Gentoo Iceweasel/3.0.6 '
                            );
    
    $bot->get('https://wifi.free.fr/');
    
    $bot->form_name('form1');
    $bot->field( login => 'mon_login' );
    $bot->field( password => 'mon_pass' );
    
    $bot->submit();
    
    

    Explications :

    1. Je démarre une instance de Mech (nommée $bot).
    2. Je charge la page.
    3. Je selectionne le formulaire (via son nom, mais il existe d'autre methode pour le selectionner via son ordre dans la page).
    4. Je rempli les champs login et password.
    5. J'envoi.

    Roulez jeunesse.

  • # ou en Python avec mechanize

    Posté par (page perso) . Évalué à 4.

    tu trouveras quelques exemples là

    http://wwwsearch.sourceforge.net/mechanize/

    ou là
    http://stackoverflow.com/questions/11064122/python-mechanize-setting-input-into-form

    If you choose open source because you don't have to pay, but depend on it anyway, you're part of the problem.evloper) February 17, 2014

  • # ou en java avec httpclient (apache)

    Posté par . Évalué à 3. Dernière modification le 03/04/13 à 09:05.

    Comme tout le monde y va de son language je t'indique que tu peux le faire aussi en java avec la lib apache httpclient => http://hc.apache.org/httpclient-3.x/

    Perso je même si je maitrise plus le java que les autres languages, pour un truc aussi simple je le ferai plutot via un script perl ou python.
    Mais c'est quand même bien de savoir que ça existe en java car parfois tu n'a pas le choix du language et tu dois quand même faire les choses.

  • # utiliser les options du navigateur

    Posté par . Évalué à 2.

    pour memoriser les login/pass de ce site.

  • # Greasemonkey

    Posté par (page perso) . Évalué à 1.

    Je sais pas si ça peut être une piste mais j'utilise un script Greasemonkey pour me connecter à un SSO automatiquement quand il me le demande.

    // ==UserScript==
    // @name        Autofill form SSO
    // @namespace   http://example.net/
    // @description Script for filling automatically a form on a SSO webpage
    // @include     <le site sur lequel le script doit avoir une action>
    // @version     1
    // ==/UserScript==
    
    
    var form = document.getElementById('<id du form>');
    var user = document.getElementById('<id du champ username>');
    var pass = document.getElementById('<id du champ password>');
    user.value = '<le username>';
    pass.value = '<le password>';
    form.submit();
    
    

    Mais le mot de passe est en clair dans le fichier, et si le SSO réaffiche le formulaire directement quand la tentative a échoué, il y a un risque de partir en boucle :-)

    • [^] # Re: Greasemonkey

      Posté par . Évalué à 0.

      pas mal. Superbe même. Sauf que je ne sais pas pourquoi, l'interface de connexion me dit toujours que le mot de pass ou le login n'est pas bon, mais quand je stop la page (car elle tourne en rond) et que je laisse ce qu'il y a d'écrit, je valide et pouf, ça marche…
      J'aimerai comprendre pourquoi.
      Car le formulaire est bien validé vu que la page ne cesse de se recharger, mais rien n'y fait, il veut pas me connecter, il me faut aller sur le bouton manuelement pour valider et pouvoir me connecter…

      Avez vous eu déjà ce même problème?
      merci.

    • [^] # Re: Greasemonkey

      Posté par . Évalué à 0.

      Non c'est bon. J'ai du lire plus correctement le code du site. Il passait par une fonction js pour créer la connexion, donc j'ai du appeler cette dernière avant de valider.

      Le portail de connexion s'appelle SonicWall (pour ceux qui aurait la même chose et qui voudrait savoir comment faire la même chose: contactez-moi -le code pourrait être différent).

      Merci à tous.

  • # arf des choses bien compliquées pour un probleme tout simple

    Posté par . Évalué à -1.

    Salut,

    Oublis perl/java/php si tu ne sais pas dev tu peux faire beaucoup plus simple:

    1) tu télécharges un proxy d interception comme paros (www.paros.org)
    tu browses le site avec paros en activant la fonction "Trap"

    Cela va te permette de voir avec exactitude les requetes envoyés à ton serveur (GET/POST)

    2) A partir de la tu fais un shell script avec curl du genre:

    exemple pour la premiere barriere de login:

    curl –-cookie-jar /tmp/cjar --data “username=prout&password=12345″ http://tonsite.com/login.php"

    ensuite tu peux reutiliser ce cookie pour faire par exemple

    curl –b /tmp/cjar --data “validation=yes″ http://tonsite.com/validation.php"

    bonne chance!

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.