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 :

selenium télécharger des fichiers non référencés [Python 3.X]


Sujet :

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 selenium télécharger des fichiers non référencés
    Bonsoir,
    Je me casse la tête depuis quelques heures.
    Je me connecte à un site avec login et mot de passe.
    Je parcours quelques pages avec Selenium et j'arrive sur la page qui m'intéresse.
    Sur cette page se trouvent des icônes (pdf, docx, tex) sur lesquelles je dois cliquer pour télécharger les fichiers correspondants.
    Malheureusement, je n'y parviens pas.
    Je liste les fichiers qui m'intéressent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    liste_suj = driver.find_elements(by=By.CSS_SELECTOR, value="button[class='ec']")
    print(liste_suj)
    qui me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [<selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="e2af7658-253b-42db-b724-913336f7ffa2")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="f1ed9649-4141-4dd2-8964-9d26cb0e64e3")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="5a1f871d-5200-4020-8949-2a59ded10615")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="14e9eb79-9e72-4428-9f7c-8b6aec0629a0")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="834f24da-e11e-49e0-a3db-a188800dc2fc")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="26458a06-6228-4563-8752-0be88fbc2d38")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="f318e428-67ca-491c-9550-63f03a74c87a")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="d499334e-31dd-4c3b-85d5-6d7bc8f1744d")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="3f4c606c-340d-4dfe-a4ab-885fc2ac71df")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="8cceb9b4-c2bd-489e-a3af-9d7ae0535b08")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="d76474ca-9859-4273-a21b-0fb7b6ee532d")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="1a2bbcc4-5eb9-40eb-adba-eb70596b2896")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="95891d2d-3754-43c7-85b4-df8ede63a0be")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="74cee4d5-4652-43de-b3f2-f2c3c9d851b1")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="ab87ba73-f374-4def-abd9-6473696d05a1")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="1d4bcb80-c752-4bb5-a351-0d41a6d23713")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="65b65724-e90b-4615-bec8-0352b640fe3d")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="84ca679f-e8d0-4073-9318-44baa10be32f")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="ffafc0bb-b484-4d24-85f6-0b59d2a7a547")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="cb383177-ed32-4b87-96ab-1c68103aace7")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="e63b3c01-5932-4769-af47-21adf6428f03")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="94fba562-627b-4854-88b7-dd0561668dee")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="d38ff558-298b-485a-990d-76d7dd2380a7")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="0ea0287c-b5bf-4c93-99c7-458d2c19f8c4")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="c7014639-e0f7-4d0b-8c8c-e4abefd2d5ba")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="7f14348a-6813-4dab-84f7-f1e1e7eaa4fa")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="96af94ec-898d-4dd8-9913-8b0bc5d74cc4")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="c843b5e8-da76-48d2-aec7-830a20e57911")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="25468b46-3f73-4244-8315-9c7071d1612e")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="ce45f9e3-8f3a-44a4-85a2-9104475be31a")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="57fe3ab2-2fe6-4619-99b2-9de4443b8c30")>, <selenium.webdriver.remote.webelement.WebElement (session="766fc56767efaf0ef6b004e180921b8e", element="993ae25c-919a-4051-8805-ea9429e8790e")>]
    Je tente ensuite de les télécharger mais sans succès avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for suj in liste_suj:
        # driver.refresh()
        suj.click()
    qui me donne l'erreur :
    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
    Traceback (most recent call last):
     
      File "/home/marco5/.local/lib/python3.10/site-packages/spyder_kernels/py3compat.py", line 356, in compat_exec
        exec(code, globals, locals)
     
      File "/.............../.........../................./ups1.py", line 78, in <module>
        suj.click()
     
      File "/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webelement.py", line 81, in click
        self._execute(Command.CLICK_ELEMENT)
     
      File "/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webelement.py", line 740, in _execute
        return self._parent.execute(command, params)
     
      File "/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/webdriver.py", line 430, in execute
        self.error_handler.check_response(response)
     
      File "/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/errorhandler.py", line 247, in check_response
        raise exception_class(message, screen, stacktrace)
     
    StaleElementReferenceException: stale element reference: element is not attached to the page document
      (Session info: chrome=109.0.5414.119)
    Il y a 6 pages à parcourir et pas mal de fichiers à télécharger sur chaque page.
    Si quelqu'un a une idée pour automatiser, je suis preneur.
    Bonne fin de semaine.
    [edit] Au cas où, si cela peut aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sélecteur CSS*:
    #bot > tbody:nth-child(5) > tr:nth-child(1) > td:nth-child(4) > button:nth-child(1) > img:nth-child(1)
     
    chemin CSS*:
    html body div#corps form table#bot tbody tr td button.ec img
     
    Xpath*:
    /html/body/div[2]/form/table[2]/tbody[3]/tr[1]/td[4]/button[1]/img

  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
    Au cas où...Nom : capture1.png
Affichages : 297
Taille : 87,5 Ko

  3. #3
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 228
    Par défaut
    Hello,
    Citation Envoyé par marco056 Voir le message
    StaleElementReferenceException: stale element reference: element is not attached to the page document
    voir des solutions ici par exemple.
    Ami calmant, J.P

  4. #4
    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
    Le souci, c'est que je n'ai pas de href. Sinon, je saurais faire.

  5. #5
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    bonjour

    Puisque ton problème est que le dom change à chaque clic, une solution serait de refaire la recherche find_elements() dans ta boucle
    un truc du type (pas testé!):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    nombre_liens = len(driver.find_elements(By.CSS_SELECTOR, "img[class='bidule']"))
    for i in range(nombre_liens):
        liens = driver.find_elements(By.CSS_SELECTOR, "img[class='bidule']")
        for j, lien in enumerate(liens):
            if i != j: 
                continue
            lien.click()
            # wait 1 seconde ?
            break

  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
    Citation Envoyé par papajoker Voir le message
    bonjour

    Puisque ton problème est que le dom change à chaque clic, une solution serait de refaire la recherche find_elements() dans ta boucle
    un truc du type (pas testé!):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    nombre_liens = len(driver.find_elements(By.CSS_SELECTOR, "img[class='bidule']"))
    for i in range(nombre_liens):
        liens = driver.find_elements(By.CSS_SELECTOR, "img[class='bidule']")
        for j, lien in enumerate(liens):
            if i != j: 
                continue
            lien.click()
            # wait 1 seconde ?
            break
    Youpi !!!
    Un énorme merci.
    J'ai encore un peu de boulot mais j'ai réussi grâce à toi.
    Voici le code légèrement corrigé et adapté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    nombre_liens_pdf = driver.find_elements(By.CSS_SELECTOR, "img[alt='pdf']")
    for i in range(len(nombre_liens_pdf)):
        liens = driver.find_elements(By.CSS_SELECTOR, "img[alt='pdf']")
        for j, lien in enumerate(liens):
            if i != j: 
                continue
            lien.click()

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

Discussions similaires

  1. Wget - télécharger des fichiers non-html
    Par narmataru dans le forum Réseau
    Réponses: 10
    Dernier message: 14/07/2018, 15h20
  2. Impossible de télécharger des fichiers depuis mon serveur
    Par amine55555 dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 1
    Dernier message: 12/05/2007, 14h15
  3. télécharger des fichiers de paramétrage
    Par yas2006 dans le forum JWS
    Réponses: 7
    Dernier message: 27/03/2006, 14h17
  4. Problème pour Télécharger des fichiers
    Par joce3000 dans le forum C++Builder
    Réponses: 8
    Dernier message: 21/01/2005, 10h30

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