我遇到了一个我很难理解的问题。我有一个带有一系列li项目的ul列表的HTML,并且在这些li项目中,它们有我想要在Python上使用Selenium获取的元素。网站构成如下
<ul id="results">
<li>
<div class="name">John</div>
<div class="age">23</div>
</li>
<li>
<div class="name">Bob</div>
<div class="age">39</div>
</li>
..... #more li
</ul>
所以这似乎是一个非常简单的问题,我们只将li元素保存为变量,并遍历每个列表以保存信息。问题在于,无论我做什么,我的结果总是一遍又一遍地回放第一个列表项。它将遍历正确数量的元素,但总是返回第一个元素。所以,如果我做以下
results = driver.find_elements_by_xpath("""//*[@id="results"]/li""")
for result in results:
name = result.find_element_by_xpath("""//*[@class="name"]""").text
print(name)
现在,如果在这种特殊情况下有10个li元素,那么名称&#34; John&#34;将只打印10次而不是根据迭代列表进行更新。
答案 0 :(得分:3)
第二次搜索的XPath不正确。它必须以.
开头。否则,它将从顶部开始搜索。这就是它总能找到第一个项目的原因。请参阅下面的示例。
results = driver.find_elements_by_xpath('//*[@id="results"]/li')
for result in results:
name = result.find_element_by_xpath('.//*[@class="name"]').text
print(name)