0
votes

Capture Classe Texte - Sélénium Python

J'essaie de capturer un élément d'une page Web à l'aide de sélénium dans Python XXX PRE>

J'essaie de capturer le nom Ana Smith à Phyton: P>

    try:
        name=  driver.find_elements_by_class_name("_1jlxc _3Whw5").text

    except Exception as e:
        print("|False")


3 commentaires

Est-ce que cela augmente une exception ou simplement de retourner une chaîne vide?


Élever une exception - Code Edit - Imprimer false


Dans ce cas, fournissez la trace de votre programme, il aide à localiser l'erreur / bug


4 Réponses :


1
votes

.text n'a pas besoin () c'est juste ".text"

En général, il est plus facile d'aider avec plus d'informations, mais de l'information que vous avez donnée, c'est le problème principal que je vois.


2 commentaires

Édité ou extraire, mais ne trouvez pas. Je veux n'abandonner que le nom Ana Smith, mais l'élément ne peut pas être trouvé dans le code


Donc, cela pourrait être parce que la page ne se charge pas assez rapidement, vous devez donc utiliser la fonction d'attente en sélénium, mais également, la méthode Find_Elements renvoie une liste et .Text ne fonctionne pas sur une liste. Pour contourner ce problème, vous devez soit itérer via la liste à l'aide d'une boucle pour boucle et utiliser .Text sur chaque itération ou si vous ne regardez vraiment qu'une étiquette, vous pouvez simplement le faire trouver des éléments plutôt que des éléments.



0
votes

wind_elements_by_class_name renvoie une liste, soyez prudent. Vous pouvez utiliser wind_element_by_class_name si vous souhaitez que le premier élément ou que vous pouvez sélectionner un élément de la liste renvoyée par Find_elements_by_class_name . .


0 commentaires

0
votes

Pour gérer l'élément dynamique Vous devez induire webDriverwait et attendre que l'élément soit visiteur visibilité_of_element_located () code> et suivit sélecteur CSS code>

strud>: p>

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By


0 commentaires

0
votes

Vous devez envisager un couple de choses:

  • wind_elements_by _ * retourne une liste. Mais vous voulez cet élément particulier. Vous devez donc utiliser wind_element_by _ * à la place.
  • pilote.find_element_by_class_name () prend une seule classe. Donc, cela n'acceptera pas plusieurs classes comme dans: XXX

  • le plus important, l'élément est un élément dynamique, de sorte d'imprimer le texte ana smith vous devez induire webDriverwait pour le visibilité_of_element_located () et vous pouvez utiliser l'un des éléments suivants StratégiesLocator :

    • Utilisation css_selector et get_attribute ("innerhtml") : XXX

    • en utilisant xpath et texte attribut: XXX

    • Cependant, la valeur (s) de l'attribut classe , _1JLXC , _3whf5 , etc. indique que les valeurs sont générées par réactjs , VUE .js , etc. Donc, ces valeurs ne sont jamais statiques et elles continueraient à changer chaque fois que vous accédez à la page Web.

      Solution

      En dehors de l'induction WebDriverwait Vous devez construire soit CSS-SELECTORS ou XPath en fonction des attributs statiques éventuellement de certains éléments ancêtres.


0 commentaires