J'essaie de capturer un élément d'une page Web à l'aide de sélénium dans Python 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")
4 Réponses :
.text n'a pas besoin () c'est juste ".text" p>
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. p>
É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.
wind_elements_by_class_name code> renvoie une liste, soyez prudent. Vous pouvez utiliser wind_element_by_class_name code> 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 code>. P>.
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> from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
Vous devez envisager un couple de choses:
wind_elements_by _ * code> retourne une liste. Mais vous voulez cet élément particulier. Vous devez donc utiliser wind_element_by _ * code> à la place. Li>
-
pilote.find_element_by_class_name () code> prend une seule classe. Donc, cela n'acceptera pas plusieurs classes comme dans: p>
XXX PRE> LI>
-
le plus important, l'élément est un élément dynamique, de sorte d'imprimer le texte ana smith fort> vous devez induire webDriverwait pour le visibilité_of_element_located () code> et vous pouvez utiliser l'un des éléments suivants StratégiesLocator : P>
-
Utilisation css_selector code> et get_attribute ("innerhtml") code>: p>
XXX PRE> LI>
-
en utilisant xpath code> et texte em> attribut: p>
XXX PRE> LI>
ul> li>
-
Cependant, la valeur (s) de l'attribut em> classe em>, _1JLXC code>, _3whf5 code>, 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. P> LI>
ul> Solution h2>
En dehors de l'induction WebDriverwait em> Vous devez construire soit CSS-SELECTORS ou XPath en fonction des attributs statiques éventuellement de certains éléments ancêtres. P> P>
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