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 :

probleme d'identification sur site web via python


Sujet :

Réseau/Web Python

  1. #1
    Membre habitué Avatar de KINENVEU
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Points : 131
    Points
    131
    Par défaut probleme d'identification sur site web via python
    voila, je cherche a recuperer une page html via un script python.

    le souci, c'est que pour avoir acces a cette page, je dois m'identifier.

    j'ai essaye de suivre les instructions des articles suivant :
    http://www.voidspace.org.uk/python/a...#fetching-urls
    http://www.voidspace.org.uk/python/a...tication.shtml
    http://www.voidspace.org.uk/python/a...ookielib.shtml

    -1- j'essaie d'acceder directement a la page :
    aucune erreur n'est levee, mais je suis redirige vers la page d'identification.

    -2- j'essaie donc de comprendre comment s'identifier.
    il semblerait que ce ne soit pas un schema d'authentification basique.
    mais plutot que cela fonctionne simplement avec les cookies.

    donc, si j'ai bien compris, je dois m'identifier, recuperer le cookie et le faire suivre a chaque nouvelle requette.

    -3- j'essaie donc de m'identifier et de recuperer le cookie.

    c'est la que je bloque, car je n'arrive pas a m'identifier ...

    la page d'identification est de type php, avec 2 boites de saisie : login et password.

    comment est ce que je peux remplir ces champs ?
    ou mieux, comment appeler directement les fonctions qui sont derriere avec les bon parametres ?

    merci d'avance a tous ceux qui pourront m'eclairer.

  2. #2
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Est-ce que pour la connexion à ce site se fait par Apache (la boîte de dialogue usager/mot de passe qui apparaît) ou par le site lui même (genre un login comme sur developpez.net)?

    Dans le premier cas, la technique sur voidspace.co.uk fonctionne, je l'ai utilisé hier. Autrement, il va falloir que tu utilises mechanize

  3. #3
    Membre habitué Avatar de KINENVEU
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Points : 131
    Points
    131
    Par défaut
    la saisie du login/password se fait directement sur le site :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <form action="toto.php" method="post" ...>
    <input  ... />
    ...
    <input  ... />
    ...
    </form>
    merci pour les infos, je vais regarder ca.
    je regarde egalement le principe du php,
    car je n'ai pas encore bien compris.

    je crois qu'il faut que j'arrive a faire le post a action avec les donnees de input pour m'identifier ?
    mais je n'ai pas encore compris comment.

    puis je recupere le cookie,
    et en le faisant suivre,
    je devrais pouvoir acceder a la page voulue.

    est ce que c'est ca ?

  4. #4
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Avec mechanize, tu as un genre de mini browser. Tu dis que tu veux entrer telle information dans tel champ, telle information dans tel autre champ que tu veux cliquer sur le bouton submit, etc. Très pratique pour l'automatisation.

  5. #5
    Membre habitué Avatar de KINENVEU
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Points : 131
    Points
    131
    Par défaut
    je viens d'installer mechanize, je vais essayer avec ca. :-)

  6. #6
    Membre régulier Avatar de will97
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 126
    Points : 80
    Points
    80
    Par défaut
    pour plus d'ino sur les form avec php: http://w3schools.com/php/php_forms.asp

  7. #7
    Membre habitué Avatar de KINENVEU
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Points : 131
    Points
    131
    Par défaut
    merci will97 pour l'info. :-)

    j'ai l'impression de comprendre un peu l'idee maintenant, mais en pratique, je n'y arrive toujours pas...

    est -ce que quelqu'un peut me dire ce que signifie cette erreur :
    mechanize._response.httperror_seek_wrapper: HTTP Error 403: request disallowed by robots.txt

    sinon, j'ai egalement essaye de passer par ClientForm (sans utiliser mechanize)
    j'arrive a recuperer le "form", je crois que j'arrive a le remplir, et je "click",
    mais ca ne marche toujours pas ...

    je ne comprends pas, ca n'avait pas l'air si complique en theorie ...
    est-ce quelqu'un a deja utilise ca pour s'identifier sur un site ?

  8. #8
    Membre habitué Avatar de KINENVEU
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Points : 131
    Points
    131
    Par défaut
    voici l'essai avec urlib2 et ClientForm :

    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
     
      url = "url.php"
      login = "moi"
      password = "XXX"
     
      import ClientForm
      import urllib2
      request = urllib2.Request(url)
      response = urllib2.urlopen(request)
      forms = ClientForm.ParseResponse(response, backwards_compat=False)
     
      form = forms[0]
      print "form:", form
     
      control = form.find_control("action", type="hidden")
      print "control.name, control.value, control.type:", control.name, control.value, control.type
      control.readonly = False
      control.value = login
      control.readonly = True
      print "control.name, control.value, control.type:", control.name, control.value, control.type
      control = form.find_control("password", type="password")
      print "control.name, control.value, control.type:", control.name, control.value, control.type
      control.value = password
      print "control.name, control.value, control.type:", control.name, control.value, control.type
     
      request2 = form.click()  # urllib2.Request object
      try:
          response2 = urllib2.urlopen(request2)
      except urllib2.HTTPError, response2:
          print "error here"

    et voici l'affichage :


    form: <POST url.php application/x-www-form-urlencoded
    <HiddenControl(action=ident) (readonly)>
    <PasswordControl(password=)>
    <SubmitButtonControl(<None>=) (readonly)>>
    control.name, control.value, control.type: action ident hidden
    control.name, control.value, control.type: action moi hidden
    control.name, control.value, control.type: password password
    control.name, control.value, control.type: password XXX password




    je ne comprends pas, je recupere le "form", je le remplis, je le post et la rien ...
    reponse2 est pareil a reponse1 ...

  9. #9
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    KINENVEU m'a contacté en privé pour me demander comment faire pour se loguer à un site web. Comme ca peut être utile à plusieurs, voici un script pour se loguer sur les forums de developpez.net. Ce script requiert la librairie mechanize (sudo easy_install mechanize).

    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
     
    def find_login_form(html_form):
        return html_form.attrs['action'].startswith('login.php')
     
    br = mechanize.Browser()
    br.open('http://developpez.net/forums/')
    br.select_form(predicate=find_login_form)
    br.form.set_value('gnuvince', name='vb_login_username')
    br.form.set_value('MOTDEPASSE', name='vb_login_password')
    br.submit()
    br.follow_link(url='http://developpez.net/forums/')
    br.follow_link(url_regex=r'private.php$')
    print br.title()
    br.close()

  10. #10
    Membre habitué Avatar de KINENVEU
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Points : 131
    Points
    131
    Par défaut
    merci GnuVince
    je vais regarder ca.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    Salut, je remonte le sujet car j'aimerai moi aussi faire un petit script d'autologin.

    J'ai regardé le code proposé par GnuVince que je suis étape par étape.
    Je commence basique avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import mechanize
     
    br = mechanize.Browser()
    br.open('http://developpez.net/forums/')
    print br.title()
    br.close()
    J'ai essayé avec plusieurs sites et ils marchent tous, sauf celui que je veux. A chaque fois j'ai le message :
    Traceback (most recent call last):
    File "fff.py", line 7, in <module>
    br.open('http://www.fff.fr')
    File "/usr/lib/python2.5/site-packages/mechanize/_mechanize.py", line 203, in open
    return self._mech_open(url, data)
    File "/usr/lib/python2.5/site-packages/mechanize/_mechanize.py", line 254, in _mech_open
    raise response
    mechanize._response.httperror_seek_wrapper: HTTP Error 403: request disallowed by robots.txt
    Quelqu'un aurait une idée ? Le site est-il protégé contre les automatisations ??

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    Personne n'a d'idée sur mon problème ?
    GnuVince n'est pas dans le coin ? :p

    Je ne pense pas que le problème vienne de mon code car il fonctionne sur d'autres sites, mais comment faire pour contourner ce message d'erreur et afficher le titre de la page ?

  13. #13
    Membre expérimenté Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    ton erreur est explicite:
    HTTP Error 403: request disallowed by robots.txt
    Le site que tu visites ne permet pas la récuperation d'information par des robots. La librairie Mechanize respecte cet interdit:
    Automatic observance of robots.txt.
    Passer outre doit être possible en modifiant le User-agent mais ce n'est pas respectueux pour le site que tu visites (la fff ne veut peut être pas que les résultats qu'elle propose soit automatiquement récuperés sur d'autres sites).
    "Etre conscient de la difficulté permet de l'éviter.."
    Lao-Tseu.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    Merci, ça fonctionne !
    Je suis encore bloqué mais c'est une problème d'expression régulière, je vais donc faire un autre post.

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Je me permets de faire remonter ce sujet parce que j'essaye d'adapter l'exemple de GnuVince pour me connecter sur un site (www.charazay.com) et pouvoir y récupérer des infos diverses!
    Mais je n'arrive pas à grand chose si ce n'est l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Traceback (most recent call last):
      File "test12.py", line 8, in <module>
        br.select_form(predicate=find_login_form)
      File "C:\Program Files\Python25\lib\site-packages\mechanize-0.1.9-py2.5.egg\me
    chanize\_mechanize.py", line 503, in select_form
      File "test12.py", line 4, in find_login_form
        return html_form.attrs['action'].startswith('login.php')
    KeyError: 'action'
    Voilà le script que j'ai pour l'instant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import mechanize
     
    def find_login_form(html_form):
        return html_form.attrs['action'].startswith('login.php')
     
    br = mechanize.Browser()
    br.open('http://www2.charazay.com/index.php')
    br.select_form(predicate=find_login_form)
    br.form.set_value('*****', name='username')
    br.form.set_value('*****', name='password')
    br.submit()
    br.follow_link(url='http://www1.charazay.com/index.php?act=forums')
    print br.title()
    br.close()
    Il semble que ce soit la fonction find_login_form qui pose problème, mais je ne comprends pas pourquoi... Quelqu'un pourrait-il éclairer ma lanterne?

    Merci d'avance!!

  16. #16
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Bonjour,
    je remonte ce petit sujet car je suis dans le même cas de figure.
    Je veux me connecter de manière automatique à un site web et ensuite le visiter.
    J'ai réussi la connexion via ce code :
    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
     
        username = 'usm'
        password = 'pwd'
     
        # Ceci cree un password manager
        passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
     
        # Comme nous avons mis None au debut il va toujours utiliser
        # cette combinaison username/password pour les urls
        # pour lesquels `url` est un super-url
        passman.add_password(None, url, username, password)
     
        # creation du AuthHandler
        authhandler = urllib2.HTTPBasicAuthHandler(passman)
     
        opener = urllib2.build_opener(authhandler)
     
        # Tous les appels a urllib2.urlopen vont maintenant utiliser le handler
        # Ne pas mettre le protocole l'URL, ou
        # HTTPPasswordMgrWithDefaultRealm sera perturbe.
        # Vous devez (bien sur) l'utiliser quand vous recuperez la page.
        urllib2.install_opener(opener)
     
        # on fait croire au site qu'on visite qu'on est un navigateur
        # on va modifier le header de la requete HTTP
        # sinon on peut se faire jeter car on s'annonce avec python.urllib
        headers={'User-agent':'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT'}
     
        # l'authentification est maintenant geree automatiquement pour nous
        pagehandle = urllib2.urlopen(url)
     
        str = pagehandle.read()
    par contre une fois cette étape franchie, je veux lancer le navigateur par défaut et pouvoir naviguer sur le site sans rentrer login et mot de passe.
    Comment procéder ???
    D'avance merci.

  17. #17
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Je suis toujours bloqué !!!

Discussions similaires

  1. [Débuter] Récupérer des données sur un site Web via une requête HTTP
    Par sauvezmoi dans le forum Réseau
    Réponses: 1
    Dernier message: 29/04/2015, 16h03
  2. Ouverture Site Web via un clic sur un logo
    Par Allaedine dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 15/04/2012, 16h22
  3. Réponses: 3
    Dernier message: 23/11/2011, 11h25
  4. Probleme d'identification sur site
    Par steeveman dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 29/07/2007, 00h14
  5. Réponses: 2
    Dernier message: 08/11/2003, 23h42

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