Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre du Club
    script qui permet d'ouvrir un site web, remplir un formulaire et le valider
    bonjour les amis,
    je veux faire un scripte python qui fait ça :
    1- accéder à un formulaire dans un site web (lien url)
    2- remplir les zone de textes qui se trouvent dans le formulaire avec des valeurs prédéfinies
    3- et puis valider le formulaire (faire submit).

    quelqu'un a une idée ?
    Merci d'avance

  2. #2
    Membre extrêmement actif
    C'est aussi un code que j'ai en projet depuis plusieurs mois.
    On m'avait indiqué que le module mechanize permet de faire cela, mais je ne suis pas arrivé à l'utiliser. Donc je ne peux pas te renseigner plus.
    Mais le sujet m'intéresse et je pourrais peut être m'y mettre.

    C'est une question qui irait sans doute mieux dans le forum Réseau/Web, tu aurais peut être plus de réponses.

  3. #3
    Membre du Club
    je suis d'accord avec toi,
    mais le module mechanize existe sous perl et n'est pas sous python.
    il y a aussi le module CURL sous php,mais le probleme avec perl et php est que ces modules n'interrogent pas les codes javascript....
    je veux réaliser ce script avec python

  4. #4
    Membre extrêmement actif
    Alors comment faire ?
    Il faudrait connaître
    - tout ce qui concerne les échanges entre ordinateurs par l'internet, les protocoles, les couches, les paquets, les requêtes etc etc etc
    - les fonctions de Python relatives à ce bazar
    N'ayant aucune connaissance dans le premier sujet, je ne sais ce qu'il faut trouver concernant le second

    Il faut se lancer dans l'étude de
    19. Internet Data Handling
    et
    21. Internet Protocols and Support
    ici
    http://docs.python.org/library/index.html

    Ou là
    http://www.python.org/doc/2.5.2/lib/contents.html
    Ça semble être présenté de manière différente.

    J'ai toujours eu la flemme jusqu'à présent.
    Il faudrait un bon bouquin aussi.
    Tu vois ça comment pour ta part ?

  5. #5
    Membre du Club
    merci infiniment eyquem,
    je vais essayé ça et après je vais te donner la conception.
    merci encore une fois

  6. #6

  7. #7
    Membre du Club
    oui t as raison,
    j'ai pensé qu'il n'existe pas sous python.
    vous connaissez autres modules comme mechanize sous python ?

  8. #8
    Rédacteur

    vous connaissez autres modules comme mechanize sous python ?
    Tu as aussi 'clientform' mais mechanize est vraiment TRES bien !
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  9. #9
    Expert confirmé
    Sinon si les pages en question n'utilisent pas AJAX il est possible de passer directement par la couche HTTP : http://www.w3.org/Protocols/rfc2616/...c9.html#sec9.5
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  10. #10
    Membre du Club
    merci bien,le formulaire que je veux remplir n'utilise pas ajax,il utilise javascript

  11. #11
    Membre à l'essai
    Bonjour,

    Désolé pour cette question de débutant mais est ce que le procédé est le même pour simuler une connection à un site qui demande un login et un password ?
    Parce que je suis confronté à ce problème actuellement. url2lib ne semble pas capable de simuler un environement suffisant pour que la session soit gardée en mémoire. résultat même avec le navigateur ouvert avec le site à côté, urlopen renvoie inlassablement la page du login alors que celle-ci a déjà été remplie précédement dans le navigateur.

    C'est donc ce type d'extention qu'il faudrait utiliser pour se balader dans un site qui demande login et password ?

    EDIT: je me répond à moi même: oui c'est le même principe pour un login/password.
    J'ai trouvé ce post inétressant qui m'a bien aidé:
    http://www.developpez.net/forums/d387253/autres-langages/python-zope/reseau-web/probleme-didentification-site-web-via-python/

    Maintenant j'arrive à me connnecter au site avec mot de passe et login.. par contre c'est sans doute stupide mais je ne trouve pas la méthode pour récupérer le contenu d'une page avec
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    br = mechanize.Browser()

    Pour lire le titre de cette page par exemple, c'est br.title() ... mais pour le contenu de la page je n'arrive pas à trouver (j'ai essayé à tout hasard avec br.read() mais sans succès...

  12. #12
    Membre du Club
    tu peux recuperer le code source d'une page web avec ce petit code la :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import urllib,urllib2
    url = "http://www.google.fr"
    fp = urllib2.urlopen(url).read()
    print fp


    moi je veux acceder a une page web qui contient un formulaire,et le remplir a partir une base de donnees et puis le valider.j'arrive pas a accomplir ca ... je suis entrain d'essayer...

    pouvez vous m'envoyer ton scripte pour se logger à une page web,
    avec quel editeur travaille tu ? je veux un editeur qui possede son propre browser.
    python ne trouve pas le module mechanize (import mechanize),d'ou veint je vais l'installer... ?

    merci infiniment

  13. #13
    Membre à l'essai
    Oui, mais le code que tu donnes ne peux pas fonctionner pour une page web avec login. Apparement, il existe une sorte d'environement qui est à simuler afin de garder les cookies par exemple ou tous les autres systèmes déstinés à garder ton identification le temps d'une session.

    Voilà où j'en suis. On va peux être y arriver en s'entre-aidant :-)
    J'ai suivi le message que j'ai mis en lien et j'arrive à me connecter sur developpez sans intervenir manuellement.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    import mechanize
     
    br = mechanize.Browser()
    br.open('http://developpez.net/forums/')
     
    print br
    br.select_form(None,None,0)
    br.form.set_value('ici-ton-login', name='vb_login_username')
    br.form.set_value('ici-ton-password', name='vb_login_password')
    br.submit()
    print br.title()
    br.follow_link(url='http://developpez.net/forums/')
    br.follow_link(url_regex=r'private.php$')
    print br.title()
     
    br.close()


    Et l'ordinateur me renvoie ceci en sortie:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    <Browser visiting http://www.developpez.net/forums/>
    Forum des développeurs
    Forum des développeurs - Boîte de réception


    Le fait qu'il affiche *boite de reception* dans le titre prouve bien que le programme s'est bien connecté au site. Enfin je crois... mais c'est à vérifier en récupérant le code source HTML de la page, ce dont je suis actuellement incapable.
    Bref la solution n'est plus très loin.
    Après ce sera à tester avec d'autres sites en croisant les doigts que les systèmes d'identifications soient compatible avec mechanize...

    Pour tout cela il faut absoluement que tu installes mechanize.
    Moi je suis sous linux, j'ai fait comme ça:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    sudo easy_install mechanize

    bon si tu es sous windows je ne sais pas comment procéder désolé.

    Ce qui me fait raler c'est que je suis incapable de récupérer le contenu de la page avec br.quelquechose() ... c'est dommage.

  14. #14
    Membre à l'essai
    Pour récupérer le contenu de la page j'ai fini par trouver.
    Il faut assigner une variable à follow link et c'est à ce niveau qu'on peut utiliser read()

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    currentPage= br.follow_link(url_regex=r'private.php$')
    print currentPage.read()


    Maintenant j'ai essayé sur un autre site et ça ne marche pas. Apparement chaque site à sa façon de gérer ça. C'est un peu compliqué juste pour simuler un login pfff...

  15. #15
    Membre du Club
    impeccable arketip
    je suis sous windows et je peux pas installer mechanize, bon je vais essayer.
    avec quel editeur python tu travailles ? est ce qu'il contient son propre navigateur ?

    je veux remplir un formulaire automatiquement et le valider.

  16. #16
    Membre à l'essai
    Ha si ça marche avec les autres sites mais il y a une astuce avec follow_link: ça n'accepte pas les liens complets mais juste la dernière partie.

    Par exemple sur un autre site pour accéder à ma mailbox, je ne dois pas fournir l'entièreté du lien mais seulement le script à lancer, comme ceci:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    currentPage= br.follow_link(url='msg_inbox.asp')
    print currentPage.read()


    Pour connaitre les liens dispo on peut regarder le html ou insérer cette ligne au niveau de la page précédente (ici br)
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    for thisLink in br.links():
    	print thisLink

    .links() renvoie un tableau de lien sous forme ordonnée avec la base_url mais aussi celui qui m'interresse: url (tout court)


    Par contre j'ignorais que mechanize pour python était difficile à trouver sous windows. Le mieux c'est peut être de poster un nouveau message 'comment installer mechanize sous windows ?' et tu verras bien si quelqu'un à la solution...
    Sinon il est possible que tu puisses installer mechanize via easy install pour windows.
    Sur ce lien il y a une section 'Windows Notes' qui fait références à un exe à lancer sur windows.
    http://peak.telecommunity.com/DevCenter/EasyInstall
    Je n'ai pas approfondi plus loin, à toi de voir, mais ça semble être fait pour ça.

  17. #17
    Membre du Club
    merci infiniment,

    j'ai réussi à installer mechanize et ClientForm.

    je veux faire un script qui rempli un formulaire web automatiquement et puis le valider.
    t'as une idée comment on peut valider un formulaire ?

###raw>template_hook.ano_emploi###