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ésultats Selenium vides


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 11
    Par défaut Résultats Selenium vides
    Bonjour à tous.

    Je débute en Python et je me retrouve donc facilement bloqué. Je sollicite donc votre aide pour m'aider à résoudre un problème.
    Sur une page d'application, je souhaite récupérer les notes des utilisateurs. J'ai donc utilisé Selenium et notamment driver.find_element_by_class_name()
    Le programme fonctionne bien mais les résultats sont vides.

    La page de l'application : https://play.google.com/store/apps/d...roid.stopcovid


    Mon hypothèse est que ça vient du fait que les étoiles sont des images, mais j'ai vu dans le code HTML de l'application qu'il y a un texte descriptif qui est présent et qui retranscrit le nombre d'étoiles.
    Ex : "Deux étoiles sur 5".

    Mon objectif est d'avoir la liste complète (en texte) du nombre d'étoiles attribuées par chaque utilisateur à l'application.
    Pourriez-vous m'aider svp ?


    Mon 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
     
    from selenium import webdriver
    import os
     
    # url redirigeant vers l'application android StopCovid 
    url = 'https://play.google.com/store/apps/details?id=fr.gouv.android.stopcovid&hl=fr&showAllReviews=true'
     
     
    chromedriver_path = 'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe'
     
    driver = webdriver.Chrome(chromedriver_path)
    driver.get(url)
     
     
    #Récupération des étoiles
    app_etoile = driver.find_elements_by_class_name('nt2C1d') 
    print(len(app_etoile))
     
    app_etoile
     
    reviews_etoile = []
    for a in app_etoile:
            print(a.text)
            reviews_etoile.append(a.text)

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,
    Citation Envoyé par Aliez Voir le message
    Mon hypothèse est que ça vient du fait que les étoiles sont des images, mais j'ai vu dans le code HTML de l'application qu'il y a un texte descriptif qui est présent et qui retranscrit le nombre d'étoiles.
    Ex : "Deux étoiles sur 5".
    Oui ça a l'air d'être cela... Mais ce texte n'est pas contenu dans une balise du coup ceci .text ne fonctionnera pas... Le texte que vous voulez est la valeur de l’attribut aria-label :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <span class="nt2C1d">
        <div class="pf5lIe">
            <div aria-label="5 étoiles sur 5" role="img">
                <div class="vQHuPe bUWb7c"></div>
                <div class="vQHuPe bUWb7c"></div>
                <div class="vQHuPe bUWb7c"></div>
                <div class="vQHuPe bUWb7c"></div>
                <div class="vQHuPe bUWb7c"></div>
            </div>
        </div>
    </span>

    Il faut donc récupérer la valeur de l'attribut aria-label et non le texte de la balise <span class="nt2C1d"> comme vous le faites...

    Citation Envoyé par Aliez Voir le message
    Mon objectif est d'avoir la liste complète (en texte) du nombre d'étoiles attribuées par chaque utilisateur à l'application.
    Le problème c'est que la liste n'est pas affichée complètement,une partie est affichée et pour afficher la suite il faut déplacer la scrollbar vers le bas et parfois il faut cliquer sur Plus...

  3. #3
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 11
    Par défaut
    Merci Beginner. pour ta réponse.

    J'ai essayé d'utiliser BeautifulSoup, mais le résultat me retourne "none".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    import bs4
    from bs4 import BeautifulSoup
    import requests
     
    from requests import get
     
    reponse = requests.get("https://play.google.com/store/apps/details?id=fr.gouv.android.stopcovid&showAllReviews=true")
     
    html_soup = BeautifulSoup(reponse.text, "html.parser")
    all_etoiles = html_soup.find("div aria-label")
    print(all_etoiles)

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,

    Le problème c'est que requests.get permet de récupérer la page "statique" or les infos que vous voulez ne s'y trouve que partiellement ---> les autres avis sont ajoutés dynamiquement lorsque l'on déplace la scrollbar vers le bas et lorsque qu'on clique Plus...

    Si vous voulez utiliser BeautifulSoup il faut récupérer la page remplie dynamiquement, c'est faisable : vous faites ce qu'il faut (déplacement de la scrollbar vers le bas/clique sur Plus) pour afficher les avis que vous voulez et alors vous copiez/collez le code html via l'inspecteur (touche F12) du navigateur...

  5. #5
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 11
    Par défaut
    Hello Beginner.

    Lorsque j'exécute chromedriver_path et qu'une fenêtre s'ouvre sur la page des avis de l'application, je défile déjà jusqu'en bas de la page pour afficher l'ensemble des avis (je clique sur plus, je défile, je clique sur plus, je défile encore et encore jusqu'au moment où il n'y a plus d'avis à charger).
    Donc quand j'exécute ensuite requests.get, ma page est déjà intégralement chargée.

    Or, même après avoir fait ça, je n'ai pour réponse que "none".

    Donc je ne comprends pas. Est-ce qu'il y a une erreur dans mon code ? Est-ce que je m'y prends comme un manche ?

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Citation Envoyé par Aliez Voir le message
    Lorsque j'exécute chromedriver_path et qu'une fenêtre s'ouvre sur la page des avis de l'application, je défile déjà jusqu'en bas de la page pour afficher l'ensemble des avis (je clique sur plus, je défile, je clique sur plus, je défile encore et encore jusqu'au moment où il n'y a plus d'avis à charger).
    Ok ça c'est la première étape...

    Citation Envoyé par Aliez Voir le message
    Donc quand j'exécute ensuite requests.get, ma page est déjà intégralement chargée.
    Ben non justement, avec requests.get vous récupérez seulement la page statique et non la page que vous voyez affichée dans le navigateur...

    Pour récupérer la page que vous voyez affichée dans le navigateur, vous prouvez faire cela (sur firefox):

    - Cliquez sur F12, les outils de développement web devraient apparaitre...
    - Cliquez sur l'onglet "inspecteur", le code html devrait apparaitre...
    - Faite un clic droit sur la balise html puis cliquez sur "Copier" puis sur "l'extérieur du HTML"
    - Et enfin coller le code dans un fichier avec l'extension html.

    A ce moment-là vous pouvez utiliser BeautifulSoup sur ce fichier...


    Essayez cela après on verra le code...

Discussions similaires

  1. Résultat toujours vide
    Par sanhoua dans le forum Langage
    Réponses: 10
    Dernier message: 24/12/2009, 17h43
  2. Tester si résultat Dataset vide
    Par Tomus dans le forum BIRT
    Réponses: 6
    Dernier message: 16/10/2008, 17h20
  3. [DOM] load() résultat toujours vide
    Par Orbiplanax dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 18/12/2007, 20h49
  4. Résultat concaténation vide si 1 des champs vides
    Par harry25 dans le forum Access
    Réponses: 3
    Dernier message: 21/09/2007, 10h05
  5. [WD11]Résultat requête vide
    Par albator8619 dans le forum WinDev
    Réponses: 4
    Dernier message: 07/06/2007, 11h11

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