Selenium Webdriver:找到具有特定文本的内部跨度的跨度

时间:2018-01-28 06:30:54

标签: python-3.x selenium selenium-webdriver find

在Python中使用Selenimum Webdriver,我希望能够从以下html代码中找到My Text

<span class="first">My Text  
    <span class="second">(Total)</span>
</span>

内部span中有一个唯一的单词(Total)。 外部span包含我要查找的文字,即My Text。我怎样才能找到这个文本?

我试过使用类似的东西:

driver.find_elements_by_xpath("//*[contains(text(), '(Total)')]/prededing-sibling::span")

但它没有成功。

我很感激你的帮助。

2 个答案:

答案 0 :(得分:3)

尝试以下解决方案以获取所需文字:

span = driver.find_element_by_xpath('//span[span="(Total)"]')
required_text =  driver.execute_script('return arguments[0].childNodes[0].textContent', span).strip()

print(required_text)

的输出
'My Text'

请注意,span文字"My Text"不是span文字"(Total)"的兄弟,而是其父级,因此您无法使用{{1}获取文字preceding-sibling::span }

答案 1 :(得分:-1)

您正在使用前面的兄弟,这是错误的,您正在查看父节点中的内容

所以使用这个

"//span[text()='(Total)']/.."

上面的xpath帮助您找到相应的父节点,然后使用编程语言来获取特定的字符串

我不懂Python,我会用以下方式在Ruby中做

a='(Total)'
puts b.element(xpath: "//span[text()='#{a}']/..").text.chomp(a).strip
=> My Text