打印所有文本,只需要一个

Printing all texts, required only one

我有一个 html 文件:

<div class="panel-heading">
Some Text1
<strong>Hello</strong>
</div>
<div>
Some Text2
Some Text3
<strong>
Hi1
Hi2
</strong

我只想在我的 python 脚本中使用 selenium 打印 Hello,所以我尝试了:

element = driver.find_element_by_xpath("//div[@class='panel-heading']")    
for element in driver.find_elements_by_tag_name('strong'):
    print (element.text)

结果是:

你好

嗨1

嗨2

但我只想要:

Hello

您可以使用 next:

for element in driver.find_elements_by_tag_name('strong'):
    print(next(element.text for element in driver.find_elements_by_tag_name('strong')))

如果没有这样的元素,或者更少的神秘和更健壮,只是 break 打印后的循环:

for element in driver.find_elements_by_tag_name('strong'):
    print(element.text)
    break

您可以简单地使用

element = driver.find_element_by_xpath("//div[@class='panel-heading']")
print(element.find_element_by_tag_name('strong').text)

打印第一个 strong 所需的文本div

请注意,for element in driver.find_elements_by_tag_name('strong') 表示遍历页面上的 所有 strong 个节点。您需要将 driver 替换为 element 以迭代已定义 WebElement:

的后代 strong
for strong in element.find_elements_by_tag_name('strong'):
    print(strong.text)

你的代码给你列表。所以只需使用列表的第一个元素,它会给你 "Hello".

element = driver.find_elements_by_tag_name('strong')[0]

你在代码中犯了一个小错误,你用 panel-heading 得到了 div 但在循环中你迭代了 DOM 中带有标签 strong 的所有元素。也许,这里是您想要的样子:

divElement = driver.find_element_by_xpath("//div[@class='panel-heading']")    
for element in divElement.find_elements_by_tag_name('strong'):
    print (element.text)

但是divpanel-heading只包含一个spanstrong,你可以用css选择器得到它:

strongText = driver.find_element_css_selector(".panel-heading strong").text