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 :

[Résolu]Appeler WGET dans un script [Python 3.X]


Sujet :

Python

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 139
    Par défaut [Résolu]Appeler WGET dans un script
    Bonjour,

    Est-il possible d'utiliser la commande WGET dans un script PYTHON.

    Je souhaite accéder à un site avec connexion automatique (user, mdp) afin de récupérer des données.

    Pour l'instant je dispose d'un "bash" pour faire.

    Si c'est possible, je vois un bon sujet de perfectionnement de mes connaissances de PYTHON.

    Merci de votre aide,

    Cordialement

  2. #2
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    Salut,

    Il est possible d'installer un package wget pour avoir cette fonctionnalité sous python.

    Sinon si tu veux utiliser le wget disponible directement sous ta distribution linux tu peux passer par le module sys de python qui permet de lancer des commandes systèmes.

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

    Pour appeler une commande externe depuis un script Python, il faut (apprendre à) utiliser le module subprocess.
    Ceci dit, il y a ce qu'il faut côté bibliothèques standards (ou externes) pour écrire l'équivalent d'un "wget" sans trop d'efforts.

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

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 139
    Par défaut
    Bonjour,

    J'ai suivi vos conseils et j'ai passé 2 commandes avec WGET.

    Les résultats ne sont pas ceux que je souhaitais "la connexion est refusée" : je ne trouve pas mon erreur.

    ci-dessous mon script avec les identifiant cachés par contre je peux les fournir en direct.
    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
     
    #/usr/local/bin/python
    from tkinter import *
    from tkinter import messagebox
    import sqlite3
    import os
    import shutil
    import time
    from PIL import Image
     
    TMP = "/var/tmp"
    USER = "xxx"
    PASS = "xxx"
    URL = "http://www.eqsl.cc/qslcard/"
    #
    # PROGRAMME PRINCIPAL
    #
    #
    if __name__ == "__main__":
        os.system('wget -T 25 -q --cookies=on --keep-session-cookies --save-cookies="' + TMP + '/cookie.txt" -O "' + TMP +'/tmp.txt"' + URL +'"LoginFinish.cfm?Callsign="' +USER + '\&EnteredPassword=' + PASS + '\&Login=Go')
        os.system('wget -T 25 -q --referer ' + URL + '"LoginFinish.cfm?Callsign="' + USER + '\&EnteredPassword=' + PASS + '\&Login=Go --cookies=on --load-cookies="' + TMP + '/cookie.txt" --keep-session-cookies --save-cookies="' + TMP + '/cookie.txt" -O "' + TMP + '/tmp.txt" ' + URL + '"DownloadInBox.cfm"') 
    # fenetre principale
    if __name__ == "__main__":
        fen = Tk()
        fen.title("CHARGEMENT DES QSL DEPUIS LE SITE E-QSL")
        fen.geometry("1500x800")
     
        fen.mainloop()
    J'ai mis en pièces jointes les fichiers cookie et tmp.

    Votre aide me sera précieuse merci par avance.

    Cordialement
    Fichiers attachés Fichiers attachés

  5. #5
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    Salut,

    Alors plusieurs remarques :

    Pourquoi écrire deux fois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if __name__ == "__main__":
    Ensuite, je peux me tromper mais wget ne permet il pas de télécharger des fichiers uniquement ?

    Si oui, lorsque vous essayé de vous connecter à une page internet en utilisant login et mot de passe, je ne pense pas que wget puisse répondre à vos attentes.

    Et pour les prochains post que vous pourriez être amené à écire n'hésitez pas à mettre le message d'erreur que vous obtenez, ça aide beaucoup et vous aurez plus de réponses de la part des gens qui liront votre problème.

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

    Citation Envoyé par F6AAP Voir le message
    Les résultats ne sont pas ceux que je souhaitais "la connexion est refusée" : je ne trouve pas mon erreur
    Votre code fabrique une chaîne de caractères en fonction de variables comme URL, USER,.... et passe le résultat à os.system...
    Une chose à faire est de s'assurer que votre chaîne est "bien construite": plutôt que de l'expédier à os.system, vous l'affichez avec print. Vous devriez pouvoir avec un copie/coller l'exécuter côté shell pour voir si çà fonctionne ou vérifier qu'elle est bien ce que vous attendez.

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

  7. #7
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    Donc wget permet de se connecter à une page web avec login et mdp ?

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 679
    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 679
    Par défaut
    Citation Envoyé par nekcorp Voir le message
    Donc wget permet de se connecter à une page web avec login et mdp ?
    Le sujet serait plutôt comment automatiser avec Python, l'exécution d'une commande "bash"...
    La première chose à s'assurer lorsqu'on passe par os.system est que la ligne de commande se retrouve bien dans la chaîne de caractères passée en argument...
    Ce qui s'applique aussi à d'autres commandes!

    Sinon est-ce que wget accepte une authentification, c'est plutôt une question à poser dans un forum Linux, mais oui çà le fait.

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

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 139
    Par défaut
    Bonsoir,

    Merci pour les réponses fournies : elles m'ont permis d'avancer un peu.

    Tout d'abord une erreur de syntaxe dans la 1ère commande WGET : Nouvelle commande :

    wget -T 25 -q --cookies=on --keep-session-cookies --save-cookies="/var/tmp/cookie.txt" -O "/var/tmp/tmp.txt" "http://www.eqsl.cc/qslcard/LoginFinish.cfm?Callsign="xxx\&EnteredPassword=xxx\&Login=Go"

    avec cette commande le fichier cookie évolue :

    # HTTP cookie file.
    # Generated by Wget on 2017-07-25 20:32:22.
    # Edit at your own risk.

    www.eqsl.cc FALSE / FALSE 0 USEJPG 1
    www.eqsl.cc FALSE / FALSE 0 STATE
    www.eqsl.cc FALSE / FALSE 0 COUNTRY FRANCE
    www.eqsl.cc FALSE / FALSE 0 NICKNAME Saint%20Georges%20des%20Gr
    www.eqsl.cc FALSE / FALSE 2447087549 MENUTYPE I
    www.eqsl.cc FALSE / FALSE 0 PAGELANGUAGE FR
    www.eqsl.cc FALSE / FALSE 0 LOGINUSERID 54992
    www.eqsl.cc FALSE / FALSE 0 LOGINHAMID 1295377
    www.eqsl.cc FALSE / FALSE 0 LOGINDATE %7Bts%20%272017%2D07%2D25%2018%3A32%3A29%27%7D
    www.eqsl.cc FALSE / FALSE 0 MUGWUMP C419E204BF3402651AB324BD7741E776
    www.eqsl.cc FALSE / FALSE 0 LOGINCALLSIGN xxx

    Je comprend pas pourquoi dans le fichier cookie on ne retrouve pas le mot de passe

    ci-dessous la partie du code du site accédé concernant le loging

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
          <TD BGCOLOR="#000000" ALIGN="LEFT" VALIGN="MIDDLE" COLSPAN="2">
              <INPUT TYPE="TEXT" NAME="Callsign" SIZE="6" MAXLENGTH="15">
              <INPUT TYPE="PASSWORD" NAME="EnteredPassword" SIZE="6" MAXLENGTH="14">
              <INPUT TYPE="SUBMIT" NAME="Login" VALUE="Go">
          </TD>
    J'espère que ceci vous permettra de localiser ce qui ne va pas.

    Avec tous mes remerciements anticipés,

    Cordialement

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

    Citation Envoyé par F6AAP Voir le message
    J'espère que ceci vous permettra de localiser ce qui ne va pas
    Si wget ne fait pas ce que vous en attendez sous bash, ce n'est pas un sujet "python" mais éventuellement "linux"...

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

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 139
    Par défaut
    Bonjour,

    Merci pour toutes vos réponses.

    Mon problème se résume à une erreur de syntaxe :

    bonne commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    123
     
    wget -T 25 -q --cookies=on --keep-session-cookies --save-cookies="/var/tmp/cookie.txt" -O "/var/tmp/tmp.txt" "http://www.eqsl.cc/qslcard/LoginFinish.cfm?Callsign="xxx\&EnteredPassword=xxx\&Login=Go
    wget -T 25 -q --referer http://www.eqsl.cc/qslcard/"LoginFinish.cfm?Callsign="xxx\&EnteredPassword=xxx\&Login=Go --cookies=on --load-cookies="/var/tmp/cookie.txt" --keep-session-cookies --save-cookies="/var/tmp/cookie.txt" -O "/var/tmp/tmp.txt" http://www.eqsl.cc/qslcard/"DownloadInBox.cfm"
    Il me reste à intégrer les autres commandes pour arriver à mes fins.

    Cordialement

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

Discussions similaires

  1. appel programme dans un script cgi
    Par Jane Home dans le forum Web
    Réponses: 3
    Dernier message: 30/04/2010, 11h30
  2. appel recursif dans un script shell
    Par schizophrenia dans le forum Linux
    Réponses: 5
    Dernier message: 17/03/2009, 21h06
  3. Appel mysql dans un script ksh
    Par pinacola dans le forum Linux
    Réponses: 6
    Dernier message: 19/02/2007, 10h20
  4. Appel d'un programme C dans un script shell
    Par Spacy_green dans le forum Linux
    Réponses: 6
    Dernier message: 01/06/2006, 13h01
  5. Réponses: 2
    Dernier message: 03/04/2006, 18h38

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