【发布时间】:2018-06-18 04:04:22
【问题描述】:
我遇到了一个难以理解的问题。我有一个带有一堆 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 元素,则名称“John”将仅打印 10 次,而不是根据迭代列表进行更新。
【问题讨论】:
-
试试
find_element然后find_elements。 (注意复数)有一个结果列表和多个名称。还要仔细检查你的 xpath。