如何在 Python Selenium 中迭代无序列表
How to iterate a unordered list in Python Selenium
我想使用 Selenium webdriver 遍历 Python 中的以下元素。
<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>
我尝试了什么?
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
但问题是,它总是打印第一个元素值。该元素没有递增。
您要做的是找到带有 class='skills-section'
的标签 'ul'
,然后遍历子项。
skillsSection = a.find_element_by_xpath("//ul[contains(@class, 'skills-section')]")
for child in skillsSection.find_elements_by_xpath(".//*"):
...
也请参阅此答案了解更多详情:Selenium Python get all children elements
我最近一直在处理类似的问题,我只能打印列表中的第一项。我发现了一个需要多行并避免使用 xpaths 的解决方案。对于您的代码,您可能需要替换:
print skill.find_element_by_xpath("//span[contains(@class,'endorse-item-name')]/a").text
类似:
a1 = skill.find_element_by_class_name('endorse-item-name')
a2 = a1.find_element_by_tag_name('a')
print a2.text
不如一行 xpath 优雅,但它(应该)有效。
我想使用 Selenium webdriver 遍历 Python 中的以下元素。
<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>
我尝试了什么?
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
但问题是,它总是打印第一个元素值。该元素没有递增。
您要做的是找到带有 class='skills-section'
的标签 'ul'
,然后遍历子项。
skillsSection = a.find_element_by_xpath("//ul[contains(@class, 'skills-section')]")
for child in skillsSection.find_elements_by_xpath(".//*"):
...
也请参阅此答案了解更多详情:Selenium Python get all children elements
我最近一直在处理类似的问题,我只能打印列表中的第一项。我发现了一个需要多行并避免使用 xpaths 的解决方案。对于您的代码,您可能需要替换:
print skill.find_element_by_xpath("//span[contains(@class,'endorse-item-name')]/a").text
类似:
a1 = skill.find_element_by_class_name('endorse-item-name')
a2 = a1.find_element_by_tag_name('a')
print a2.text
不如一行 xpath 优雅,但它(应该)有效。