+-

在一个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>
假设我有一个数量不等的divs,类为 "卡",使用Selenium,我想在这些divs中循环,如果有div的类描述,我想打印他的文本。我试着做了一些类似下面的代码,但是使用了 find_element_by_xpath. 我总是会得到第一个有 "description "类的元素。我怎样才能解决这个问题,并通过循环浏览divs来正确获取元素?非常感谢。
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")
1
投票
投票
你需要拿到所有带 "卡 "类的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'] 作为提议的家伙从另一个答案。
我希望它能帮助你
1
投票
投票
只要使用 . 对于 intermediate 子标签,所以应该是这样的
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")
1
投票
投票
你可以用一个定位器和一个循环来做这个。
for description in driver.find_elements_by_css_selector("div.card > div.description"):
print(description.text)
注意:如果你想修复你当前的代码,你只是缺少了自带的 . 第二条XPath中的轴。改变 "//div[@class='description']" 到 ".//div[@class='description']" 表示您要从当前的 card 元素。
更多关于 self 轴,见 mdn 其中有很多与XPath和CSS选择器相关的信息。