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

时间:2018-09-11 11:52:45

标签: python python-3.x selenium for-loop element

我有一个html文件:

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

我只想使用硒在python脚本中仅打印你好,所以我尝试了:

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

结果是:

你好

Hi1

Hi2

但我只想要:

  

你好

4 个答案:

答案 0 :(得分:0)

您可以使用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

答案 1 :(得分:0)

您可以简单地使用

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

从要求的strong

打印 first 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)

答案 2 :(得分:0)

您的代码列出了您。因此,只需使用列表的第一个元素,它就会给您“ Hello”。

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

答案 3 :(得分:0)

您在代码中犯了一些小错误,使用div得到了panel-heading,但是在循环中,您迭代了将标记为strong的所有元素都扔到DOM中。也许,这就是您想要的样子:

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