Je voudrais parcourir les éléments ci-dessous en Python en utilisant Selenium webdriver.

<ul class="skills-section">
  <li class="endorse-item has-endorsements " data-endorsed-item-name="Ear Surgery">
  <li class="endorse-item has-endorsements " data-endorsed-item-name="Healthcare">
  <li class="endorse-item has-endorsements " data-endorsed-item-name="Hospitals">
  <li class="endorse-item has-endorsements " data-endorsed-item-name="Surgery">
  <li class="endorse-item has-endorsements " data-endorsed-item-name="Medical Education">
  <li class="endorse-item has-endorsements " data-endorsed-item-name="Pediatrics">
  <li class="endorse-item has-endorsements " data-endorsed-item-name="Treatment">
  <li class="endorse-item has-endorsements " data-endorsed-item-name="Public Health">
  <li class="endorse-item has-endorsements " data-endorsed-item-name="Patient Safety">
  <li class="endorse-item has-endorsements " data-endorsed-item-name="Emergency Medicine">
</ul>

Qu'est-ce que j'ai essayé?

skillsSection = a.find_element_by_xpath("//ul[contains(@class, 'skills-section')]")
skillsList = skillsSection.find_elements_by_tag_name("li")
for skill in skillsList:
    print skill.find_element_by_xpath("//span[contains(@class,endorse-item-name')]/a").text  

Mais le problème est qu'il imprime toujours la première valeur d'élément. L'élément ne s'incrémente pas.

1
cppcoder 13 juil. 2015 à 21:12

2 réponses

Meilleure réponse

Ce que vous voudrez faire est de trouver la balise 'ul' avec class='skills-section', puis de parcourir les enfants.

skillsSection = a.find_element_by_xpath("//ul[contains(@class, 'skills-section')]")
for child in skillsSection.find_elements_by_xpath(".//*"):
    ...

Consultez également cette réponse pour plus de détails: Selenium Python récupère tous les éléments enfants

1
Community 23 mai 2017 à 12:07

J'ai récemment été confronté à un problème similaire où je ne pouvais imprimer que le premier élément d'une liste. J'ai découvert une solution qui nécessite plusieurs lignes, et évite d'utiliser xpaths. Pour votre code, vous souhaiterez peut-être remplacer:

print skill.find_element_by_xpath("//span[contains(@class,'endorse-item-name')]/a").text  

Avec quelque chose comme:

a1 = skill.find_element_by_class_name('endorse-item-name')
a2 = a1.find_element_by_tag_name('a')
print a2.text

Pas aussi élégant qu'une ligne avec xpath, mais cela (devrait) fonctionner.

0
Evan Larson 20 mars 2016 à 19:10