IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Réseau/Web Python Discussion :

remplir des champs sur internet


Sujet :

Réseau/Web Python

  1. #1
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Par défaut remplir des champs sur internet
    Bonjours,

    Je voudrait que mon programme remplisse des champs sur internet pour y inscrire des donnés (du type login etc...). Je sais qu'il faut utiliser le module sockets mais je n'arrive pas à avoir de resultats.

    Auriez vous un petit script d'exemple

    Merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 119
    Par défaut
    Bonjour,

    pour "remplir" une forme, il faut lire le document html (module urllib2, plutot que socket), le parser (module htmllib), puis répondre par une requete post qui contient les datas attendues par la forme. C'est assez fastidieux a la main donc deux solutions:
    - après une petite recherche, j'ai trouvé ceci qui a l'air de faire le travail:
    http://wwwsearch.sourceforge.net/ClientForm

    - sur Windows, je fais ca en pilotant Internet Explorer par win32com.client. Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ie=win32com.client.Dispatch("InternetExplorer.Application.1")
    ie.Visible=1
    ie.Navigate("http://....")
    while ie.Busy: #navigate retourne tout de suite
        print "busy"
        time.sleep(5)
     
    f=ie.Document.forms[0]
    f.elements[1].value=username
    f.elements[2].value=password
    f.elements['btnSubmit'].click() #trouver le label du bouton sur le code source de la page

  3. #3
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Par défaut
    Merci beaucoup. Et donc c'est quoi le "win32com" ?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 119
    Par défaut
    win32com est un des modules de l'extension pywin32 disponible sur
    http://sourceforge.net/projects/pywin32/
    Il suffit de la telecharger, de l'installer puis dans le script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    import win32com.client
    avant le code ci-dessus.

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 94
    Billets dans le blog
    1
    Par défaut
    Salut

    Moi personnellement, lorsque je dois remplir des formulaires par le code pour un formulaire bien spécifique, je procède comme suit :
    1- J'analyse la source html contenant le formulaire. Pour cela je désactive les cookies pour voir si ils sont nécessaires ou pas. Ensuite je trouve le code de mon formulaire et je regarde quelle méthode il faut employer (POST ou GET) et quelle URL recevra les données du formulaire.
    Ensuite, je repère toutes les balises 'input' et j'associe dans un dictionnaire python les propriétés 'name' et 'value' de chaque 'input'
    2- je construit ensuite ma commande de récupération de page html en fournissant le dictionnaire et l'url selon la bonne méthode.

    Ma méthode est bien pratique dans bon nombre de cas (tous ?) mais elle ne fonctionne que si tu as le courage d'analyser le code source html (pas trop long non plus) et si tu n'utilises ton code que pour un site bien particulier.

  6. #6
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Par défaut même pb
    Bonjour,

    je suis en train d'essayer de remplir le formulaire d'un site web automatiquement. En regardant la méthode d'alexsolex :

    1- J'analyse la source html contenant le formulaire. Pour cela je désactive les cookies pour voir si ils sont nécessaires ou pas. Ensuite je trouve le code de mon formulaire et je regarde quelle méthode il faut employer (POST ou GET) et quelle URL recevra les données du formulaire.
    Ensuite, je repère toutes les balises 'input' et j'associe dans un dictionnaire python les propriétés 'name' et 'value' de chaque 'input'
    dans mon cas, méthode à employer = POST
    les données du formulaire seront reçues par un script cgi visiblement.

    2- je construit ensuite ma commande de récupération de page html en fournissant le dictionnaire et l'url selon la bonne méthode.
    comment fournir l'url et le dictionnaire avec une méthode post???

    Voilà ce que j'ai fait:

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #!/usr/bin/python
     
    #l'execution de la requete peut prendre un peu de temps !!!
     
     
    import sys
     
    import urllib
    import urllib2
    import cookielib
     
    import re
     
     
    rt_dataname = "concept57_92146_HLF"
    rt_datafile = "/Users/mathilde/Developpement/dev_SQUAT_evolution/resultats/recherche_fct_bioq/C2_5000up/concept57_92146_HLF"
    rt_libmenu = "hugo"
    rt_listmenu = "gobiol"
     
     
    queryL2LData = urllib.urlencode({"dataname": rt_dataname, "datafile": rt_datafile, "libmenu": rt_libmenu, "listmenu": rt_listmenu})
     
     
    req = urllib2.Request("http://depts.washington.edu/l2l/", queryL2LData)
    try:
        queryL2LResult = urllib2.urlopen(req)
    except IOError, e:
        if hasattr(e, "reason"):
            print "Nous avons echoue a joindre le serveur."
            print "Raison: ", e.reason
        elif hasattr(e, "code"):
            print "Le serveur n'a pu satisfaire la demande."
            print "Code d' erreur : ", e.code
    else:
        print queryL2LResult.read()
    problème : la page HTML que j'obtiens en faisant tourner le script python est celle du formulaire, et non celle qu'on obtient si on clique sur le bouton submit dans la page web...

  7. #7
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Par défaut
    En fait, mon script marche avec un autre exemple de site (les pagesjaunes). Et j'ai remarqué qu'il n'y a pas d'id spécifié sur les différents input du formulaire du site que j'essaie d'interroger, il n'y a que les "name".

    Alors nouvelle question : est ce que urllib2 sait interroger les formulaire à partir des "names" de leur input, ou est ce que les id sont obligatoire?
    Et si les id sont obligatoire, comment puis-je contourner ce problème pour interroger tout de même ce site???

    Toutes les idées sont bonnes à prendre...

Discussions similaires

  1. Intercepter un formulaire web pour y remplir des champs
    Par rpoulin dans le forum Web & réseau
    Réponses: 7
    Dernier message: 04/03/2010, 15h12
  2. Remplir des champs automatiquement sur un site
    Par Invité dans le forum Débuter
    Réponses: 4
    Dernier message: 09/05/2008, 01h04
  3. Réponses: 14
    Dernier message: 17/05/2006, 17h16
  4. [Socket][C++]Utilisation des sockets sur internet
    Par ChriGoLioNaDor dans le forum Développement
    Réponses: 8
    Dernier message: 13/01/2006, 21h38
  5. la moyen des champs sur ligne
    Par nah_wah dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 04/08/2005, 11h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo