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 :

contenu page url avec submit [Python 3.X]


Sujet :

Réseau/Web Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut contenu page url avec submit
    Bonjour,
    Je me casse le nez sur un souci depuis longtemps.
    Je vais sur une page sur laquelle je me connecte avec un identifiant et mot de passe.
    Ensuite, je peux aller sur une autre page dont je souhaite récupérer le contenu.

    J'ai fait pas mal d'essais, par exemple celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import requests
    s = requests.session()
    res = s.get(url)
    cookies = dict(res.cookies)
     
    payload = (userName, passWord)
     
    with requests.Session() as session:
        post = s.post(url, auth=payload,verify=False,cookies=cookies)
        r1 = session.get(url)
        print(r1.text)
        r2 = session.get(url2)
        print(r2.text)
    Quelle que soit la méthode utilisée, le message retourné est que la session est expirée et que je dois me reconnecter.
    Est-il possible de contourner ce problème ?
    J'ai testé également ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import urllib.request
    passman = urllib.request.HTTPPasswordMgrWithDefaultRealm()
    passman.add_password(None, url, userName, passWord)
    authhandler = urllib.request.HTTPBasicAuthHandler(passman)
    opener = urllib.request.build_opener(authhandler)
    urllib.request.install_opener(opener)
    res = urllib.request.urlopen(url)
    res_body = res.read()

  2. #2
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Bon, j'ai avancé un peu avec robobrowser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import re
    from robobrowser import RoboBrowser
     
    br = RoboBrowser()
    br.open(url)
    form = br.get_form()
     
    form["g_ea_cod"] = userName
    form["g_ea_mot_pas"] = passWord
     
    br.submit_form(form)
    src = str(br.parsed())
    print(src
    Et là, je suis planté. Voici ce que j'ai avec l'inspecteur d'élément en image jointe.
    Nom : capture1.png
Affichages : 568
Taille : 102,0 Ko

  3. #3
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    En développant, j'ai imaginé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    start = '<div class="dataTables_scrollBody"'
    end = '</div>'
    result = re.search('%s(.*)%s' % (start, end), src).group(1)
    print(result)
    mais j'obtiens l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AttributeError: 'NoneType' object has no attribute 'group'
    Donc, a priori, rien n'est trouvé...

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 762
    Par défaut
    Citation Envoyé par marco056 Voir le message
    Est-il possible de contourner ce problème ?
    Si vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import requests
    s = requests.session()
    res = s.get(url)
    cookies = dict(res.cookies)
     
    payload = (userName, passWord)
     
    with requests.Session() as session:
        post = s.post(url, auth=payload,verify=False,cookies=cookies)
        r1 = session.get(url)
        print(r1.text)
    Vous avez créé 2 instances de Session (s et session)... et si vous faites le .post avec une puis utilisez l'autre, comment voulez vous que çà fonctionne?
    Vous avez plein d'exemples sur Internet ou dans la documentation de requests... Mais il faut arriver à comprendre que qu'est le protocole HTTP sans y perdre son Python.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Oui, effectivement, je me suis mélangé les pinceaux.
    J'ai modifié et cela va beaucoup mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import requests
     
    payload = {"g_ea_cod" : userName, "g_ea_mo_pas" : passWord}
     
    post = requests.post(url, params=payload)
    r1 = requests.get(url)
    print("r1.text : ", r1.text)
    J'ai obtenu dans le corps ceci :
    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
    <div id="main">
             <form name="authentification" method="post" action="authentification" onsubmit="return verifLoginPassword(this);">
                    <div class="formulaire">
                            <div class="form">
                                    <label style="width: 40%;">Identification :</label>
                                    <span style="width: 58%;"><input type="text" size="30" name="g_ea_cod" /></span>
                            </div>
                            <div class="form">
                                    <label style="width: 40%;">Mot de passe :</label>
                                    <span style="width: 58%;"><input type="password" size="30" name="g_ea_mot_pas" /></span>
                            </div>
     
                    </div>
                    <input type="hidden" name="ACTION" value="1" />
                    <div class="validation">
                            <table class="bouton">
            <tr>
                    <td class="gauche"></td>
                    <td class="milieu"><input type="submit" value="OK" class="bouton" />            </td>
                    <td class="droite"></td>
            </tr></table>
     
                    </div>
            </form>
    </div>
            </div>
     </div>
    J'avoue mon ignorance quant aux protocoles HTTP et la doc de requests est assez imposante mais je ne trouve pas mon bonheur.
    Je souhaite accéder à des rubriques de la page, sans succès.

  6. #6
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Je n'ai pas beaucoup de succès...
    Du coup, je pars sur autre chose : j'espère que cela m'aidera à comprendre.
    J'ai donc utilisé un site dispo pour tout le monde.
    Est-ce quelqu'un peut m'indiquer comment remplir les champs ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    url = "http://www.fftt.com/site/competition/championnats-par-equipes/niveau-departemental"
     
    import requests
    s = requests.session()
    res = s.get(url)
    print(res.text)

  7. #7
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Ici, j'obtiens une liste cohérente sauf que je n'ai pas la bonne page : celle qui correspond à ma recherche liée à payload.
    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
     
    url = "http://www.fftt.com/site/competition/championnats-par-equipes/niveau-departemental"
     
    payload = {"structures_foreign_id": "56",
            "persons_sexe":"M",
            "phases_id":"2",
            "competitions_id":"7505"}
     
    import requests
    from bs4 import BeautifulSoup
     
    r=requests.get(url, data = payload ) 
    soup = BeautifulSoup(r.text,'lxml')
    print(soup)
    products = soup.findAll('div', {'class':'partners-picture2'})
    print(products)
    [edit] Je vais passer mon fil en "Général Python" car j'ai l'impression qu'il n'y a pas beaucoup de passage ici...

  8. #8
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut marco056,

    perso je te filerai bien un coup de main, mais j'avoue que j'ai rien pigé à ce que tu veux faire depuis le début

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Urls avec ou sans extension de page ? (.html)
    Par speedev dans le forum Référencement
    Réponses: 5
    Dernier message: 17/07/2008, 00h28
  2. Paramètre URL avec inclusion de page
    Par bogsy15 dans le forum Langage
    Réponses: 3
    Dernier message: 24/07/2007, 18h45
  3. Réponses: 3
    Dernier message: 09/05/2007, 10h49
  4. Servlet Affichant une page html avec contenu javascript
    Par kam81 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 18/10/2006, 16h37
  5. [C#] Comment récuper un page xml avec une URL
    Par pc152 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 03/02/2005, 16h17

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