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

Python Discussion :

Je cherche un script simple en python pour se connecter à un site avec login et mdp


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2023
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2023
    Messages : 6
    Par défaut Je cherche un script simple en python pour se connecter à un site avec login et mdp
    Bonjour,

    Je galère à trouver un script tout simple en python et efficace pour me connecter à un site avec login et mot de passe, en vue de scraper un tableau csv ou son code source.

    Merci de votre retour.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 677
    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 677
    Par défaut
    Salut,

    Si vous venez ici, c'est pour avoir de l'aide pour écrire ce genre de script, pour trouver un script tout fait, un moteur de recherche fait l'affaire. Néanmoins, l'authentification a un site Web dépend du site, sans aucune idée du mécanisme d'authentification utilisé difficile de coder (et que chercher?).

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

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2023
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2023
    Messages : 6
    Par défaut
    oups...

    Salut,

    voici le code source de la page d'identification du site (j'ai mon identifiant et mdp) :

    Code html : 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
    <!DOCTYPE html>
    <html lang="en">
    	<head>
    		<meta charset="utf-8">
    		<title>Connexion</title>
    		<link rel="stylesheet" href="css/login.css" />
    	</head>
    	<body>
    		<div class="center-screen">
    			<form action="/login.php" method="post">
    				<div class="container">
    					<label for="username"><b>Nom d'utilisateur</b></label>
    					<input type="text" name="username" value="" required>
     
    					<label for="password"><b>Mot de passe</b></label>
    					<input type="password" name="password" required>
     
    					<input type="submit" value="Se connecter">						
    				</div>
    			</form>
    		</div>
    	</body>
    </html>

    le script que j'ai utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import requests
    with requests.Session() as s:
        url = 'https://www.exemple.fr/login.php'
        s.get(url)
        values = {'username': 'mon_identifiant',
              'password': 'mon_mdp'}
     
        r = requests.post(url, data=values)
    #print r.content
        r = s.get("https://www.exemple.fr/tableau.php")
        print(r.text)
    sauf que le résultat, il imprime le code source de la page d'identification. Il ne passe pas l'étape de la connexion et accès à la page souhaitée

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 503
    Par défaut
    le site ne propose pas d'API ?
    tu as regardé le résultat (la réponse) de ton post ?

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 800
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Brunau35 Voir le message
    le script que j'ai utilisé :
    Et il te semble lisible? Tu ne te dis pas qu'il manque des tabulations par ci, par là? C'est pourtant important les tabulations, surtout en Python. Tu ne t'es pas un peu baladé sur le forum voir comment faisaient les autres à défaut d'aller lire les règles???
    Accessoirement le site www.exemple.fr n'existant pas, on ne peut pas reproduire. Mais je suis dubitatif quant à ces deux instructions à suivre: r = requests.post(url, data=values) puis r = s.get("https://www.exemple.fr/tableau.php") parce que dans tous les langages du monde, remplir deux fois une même variable sans la traiter entre temps est soit inutile et du temps perdu (dans le meilleur des cas) soit une erreur de programmation.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 677
    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 677
    Par défaut
    Citation Envoyé par Brunau35 Voir le message
    Sauf que le résultat, il imprime le code source de la page d'identification. Il ne passe pas l'étape de la connexion et accès à la page souhaitée
    Si vous avez testé ça sur l'URL https://www.exemple.fr, c'est peut être "normal"

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

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2023
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2023
    Messages : 6
    Par défaut
    En copiant/collant, j'ai omis de remettre les tabulations. Mais en fait, elles disparaissent , donc j'ai remplacé pour ce message par des "_".


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import requests
    with requests.Session() as s:
          url = 'https://www.exemple.fr/login.php'
          s.get(url)
          values = {'username': 'mon_identifiant',
                        'password': 'mon_mdp'}
     
          r = requests.post(url, data=values)
     
          r = s.get("https://www.exemple.fr/tableau.php")      <-----2nd page après connexion.
          print(r.text)
    Le site original, je ne suis pas autorisé à le diffuser...

    Je vois bien qu'il manque une commande intermédiaire. Je pensais r=requests.post... me permettait de me connecter
    et que r=s.get.. d'aller à la page demandée. Après trouver une commande pour enregistrer un tableau csv.

    J'avoue, je suis novice et bidouille, mais on me demande une petite appli html pour rendre visible des données de niveaux d'étiage dans les rivières bretonnes. Voili voilà.

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 677
    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 677
    Par défaut
    Citation Envoyé par Brunau35 Voir le message
    J'avoue, je suis novice et bidouille, mais on me demande une petite appli html pour rendre visible des données de niveaux d'étiage dans les rivières bretonnes. Voili voilà.
    On ne demande pas de faire ça à un débutant sans pouvoir lui mâcher le boulot et résoudre les difficultés qu'il pourrait rencontrer.

    Pour le reste, il n'y a pas de grosse boulette dans le code => il faut vérifier 3 fois plutôt qu'une que les informations de connexion sont correctes (et puisqu'on ne peut pas le faire pour vous...).

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

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2023
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2023
    Messages : 6
    Par défaut
    Je vais à l'automne en formation python. Il y a besoin..

    Je cherche la commande pour mon script afin de valider la fenêtre login/password. Car, je ne rentre pas sur le site.

    Sauf si il y a mieux que requests. J'ai essayé aussi ftplib, insta, sans succès.

    Merci

  10. #10
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 677
    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 677
    Par défaut
    Citation Envoyé par Brunau35 Voir le message
    Sauf si il y a mieux que requests. J'ai essayé aussi ftplib, insta, sans succès.
    C'est pas une question d'outil mais de mise en œuvre: les instructions du script déclenchent l'expédition de messages HTTP dont le contenu sera bien celui attendu par le serveur. Si ce n'est pas le cas, c'est qu'il y a soucis côté données ou protocole. Et si on ne peut pas "tester" à votre place, pas grand monde va pouvoir aider (sauf par chance).

    Ici, c'est plutôt une formation réseau qu'il faudrait (car vous n'avez pas l'air de comprendre quelles sont les informations pertinentes à fournir pour obtenir de l'aide).

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

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2023
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2023
    Messages : 6
    Par défaut
    Euréka : j'ai trouvé : sur la ligne r = s.post(url, values), j'ai rajouté True, soit : r = s.post(url, values, True).

    Du coup je rentre enfin sur le code source de la page que je cherche. Maintenant, étape suivante.

    Récupérer le tableau en csv pour scraper des infos.

    Merci pour vos commentaires.

    Bien à vous.

  12. #12
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 677
    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 677
    Par défaut
    Super! le problème initial est ...

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

  13. #13
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Par défaut
    Citation Envoyé par Brunau35 Voir le message
    Euréka : j'ai trouvé : sur la ligne " r = s.post(url, values)", j'ai rajouté "True", soit : r = s.post(url, values, True).
    Je doute fortement que ça soit la bonne solution, le troisième paramètre correspond à l'argument json de la méthode post...

    Quelque chose comme ceci devrait suffire, car les get préalables ne sont probablement pas utiles, sauf peut-être pour choper un cookie préalable, mais je doute. A noter que le fait d'utiliser Session offre la gestion automatique des cookies.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import requests
     
    with requests.Session() as s:
        url = 'https://www.exemple.fr/login.php'
        values = {'username': 'mon_identifiant', 'password': 'mon_mdp'}
     
        r = requests.post(url, data=values)
        print(f"Status code: {r.status_code}")
        print(r.text)
    Sinon, je conseille de toujours regarder le status code après chaque requête pour vérifier qu'il n'y a pas d'erreur.

    Il y a beaucoup de sites qui font appel à du JS, de l'Ajax ou qui rejettent les bots, sans parler des captchas. Soyez donc conscient du fait que cette méthode ne marchera donc pas sur tous les sites, et il ne faut pas s'en étonner si cela arrive.

  14. #14
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2023
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2023
    Messages : 6
    Par défaut
    Merci beaucoup.

  15. #15
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 635
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    Citation Envoyé par Sve@r
    je suis dubitatif quant à ces deux instructions à suivre: r = requests.post(url, data=values) puis r = s.get("https://www.exemple.fr/tableau.php") parce que dans tous les langages du monde, remplir deux fois une même variable sans la traiter entre temps est soit inutile et du temps perdu (dans le meilleur des cas) soit une erreur de programmation.
    ici, ce n'est pas un problème, parce que le premier r ne fait "qu'envoyer des données", seul les données du second seront traitées.

    pourrait-on envoyer des données avec requests sans stocker le "résultat" dans une variable (puisqu'on ne traite pas le "résultat" de l'envoi) ?

    si on ne tient pas compte de
    Citation Envoyé par binarygirl
    je conseille de toujours regarder le status code après chaque requête pour vérifier qu'il n'y a pas d'erreur.
    en effet, ce n'est pas anodin.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  16. #16
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 677
    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 677
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    pourrait-on envoyer des données avec requests sans stocker le "résultat" dans une variable (puisqu'on ne traite pas le "résultat" de l'envoi) ?
    L'appel à une fonction méthode du module requests reste l'appel à une fonction: le boulot sera fait que l'appelant en utilise ou pas le retour (qui n'est pas toujours un "résultat").
    Si on n'a pas l'intention de l'utiliser, inutile de le stocker sinon ça fait comme si on avait commencé quelque chose et oublié de le terminer.

    Citation Envoyé par N_BaH Voir le message
    si on ne tient pas compte de
    Citation Envoyé par binarygirl
    je conseille de toujours regarder le status code après chaque requête pour vérifier qu'il n'y a pas d'erreur.
    en effet, ce n'est pas anodin.
    La fonction habille un échange de messages sur un réseau, difficile de passer à l'étape/échange suivant sans avoir validé du bon déroulement de l'étape courante et conforter que l'autre côté est en état de recevoir la suite.

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

  17. #17
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 800
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    ici, ce n'est pas un problème, parce que le premier r ne fait "qu'envoyer des données", seul les données du second seront traitées.
    Tout à fait, ce n'est pas un problème, juste une inutilité. Un peu comme si, en bash, j'écrivais var="$(ls)"; var="$(date)". Tu dirais quoi si tu voyais ça dans un script?

    Citation Envoyé par N_BaH Voir le message
    pourrait-on envoyer des données avec requests sans stocker le "résultat" dans une variable (puisqu'on ne traite pas le "résultat" de l'envoi) ?
    Oui. Tu as parfaitement le droit, si tu te trouves dans une configuration que tu assures correcte, d'appeler une fonction qui fait un travail sans récupérer son retour. Il peut y avoir par exemple des fonctions qui font un job et qui retournent le nb d'infos traitées, si ça ne t'intéresse pas tu appelles juste la fonction.
    C'est un peu l'équivalent d'une redirection dans /dev/null en bash
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  18. #18
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 635
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    Tu dirais quoi si tu voyais ça dans un script?
    vraiment ?! tu n'as pas une petite idée ?

    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  19. #19
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 800
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    vraiment ?! tu n'as pas une petite idée ?
    Mouais. En fait je n'aurais pas dû mettre "ls" car même si c'est amusant de te titiller à ce sujet , dans ce cas précis ça nuit à l'idée que je voulais développer.

    Donc non, ce n'est pas un problème, juste une inutilité. Mais une inutilité n'est jamais quelque chose de bon. Ca ne peut mener qu'au mieux à une situation inchangée, et au pire une merde.
    Tandis que ne pas écrire d'inutilité ça amène au pire à une situation inchangée et au mieux une situation meilleure. C'est un peu l'équivalent du pari de Pascal mais transcrit en programmation. D'un côté écrire un truc qui ne peut mener, au mieux, qu'à que dalle ; et de l'autre écrire un truc qui même dans le pire des cas, ne posera aucun souci. Vers quoi penche ta morale de développeur? Vu ton niveau bash je n'ai aucun doute sur la réponse qui devrait, suite à cette prise de conscience, te venir à l'esprit
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. je cherche un script simple
    Par seksaki dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 11/10/2009, 02h55
  2. Réponses: 1
    Dernier message: 03/02/2009, 17h21
  3. Réponses: 3
    Dernier message: 05/02/2008, 12h32
  4. [Galerie] Cherche un script php pour avoir une galerie de photos
    Par Nimajneb dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 03/08/2006, 10h19

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