迭代元素在Python上的Selenium上获得重复结果

时间:2018-01-09 06:54:31

标签: python html selenium

我遇到了一个我很难理解的问题。我有一个带有一系列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次而不是根据迭代列表进行更新。

1 个答案:

答案 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)