在如下结构的HTML文件中:
<div class="card">
<div class="id">
ID: 123456
</div>
<div class="title">
Title 1
</div>
<div class="description">
Description 1
</div>
</div>
<div class="card">
<div class="id">
ID: 89123
</div>
<div class="title">
Title 2
</div>
</div>
假设我有一个可变数量的div与类“卡”,使用Selenium我想循环这些div,如果有div的类描述,我想打印他的文本。我试图在下面执行类似于代码的操作,但使用find_element_by_xpath
。我将始终得到具有类"description“的第一个元素。如何通过循环遍历div来修复这个问题和正确获取元素?非常感谢。
cards = webdriver.find_elements_by_xpath("//div[@class='main-div']")
for card in cards:
try:
description = card.find_element_by_xpath("//div[@class='description']")
print(description.text)
except:
print("No description")
发布于 2020-05-08 18:17:45
您需要获得所有带有类“卡”的div,并在其中搜索div“描述”:
cards = webdriver.find_elements_by_css_selector(".card")
for card in cards:
try:
description = card.find_element_by_css_selector(".description")
print(description.text)
except:
print("No description.")
PS:或者把你的第一个XPath改为//div[@class='card']
,把第二个XPath改为.//div[@class='description']
,就像其他人建议的那样。
我希望它能帮到你!
发布于 2020-05-08 18:52:02
只需将.
用于intermediate
子tag.So,应该是这样的
card.find_element_by_xpath(".//div[@class='description']")
代码在这里:
cards = webdriver.find_elements_by_xpath("//div[@class='card']")
for card in cards:
try:
description = card.find_element_by_xpath(".//div[@class='description']")
print(description.text)
except:
print("No description")
发布于 2020-05-08 21:17:26
您可以使用一个定位器和一个循环来完成这个任务。
for description in driver.find_elements_by_css_selector("div.card > div.description"):
print(description.text)
注意:如果您想要对当前代码进行修复,那么您只是在第二个XPath中缺少了self XPath轴。将"//div[@class='description']"
更改为".//div[@class='description']"
,以指示要开始搜索当前的card
元素。
有关self
轴的更多信息,请参见mdn,它具有大量XPath和CSS选择器相关信息。
https://stackoverflow.com/questions/61685222
复制相似问题