使用selenium + python获取text()节点值

时间:2013-12-04 12:14:07

标签: python dom text selenium selenium-webdriver

电话号码这是我需要获取内部文本的元素

<a href="tel:895**49****" class="button-text action-link" title="Телефон продавца" rel="nofollow">
"8 9** **9-99-**"
</a>

当我使用

phone = driver.find_element_by_class_name('button-text')
print phone.text 

它返回空字符串,因为“”中的电话号码是text()节点

当我尝试这个

print driver.find_element_by_xpath('/html/body/section/article/section[2]/ul/li[1]/a/text()')

或者

print driver.find_element_by_xpath('/html/body/section/article/section[2]/ul/li[1]/a/text()').text

它返回错误 InvalidSelectorException:消息:u'Error Message =&gt; \'xpath表达式“/ html / body / section / article / section [2] / ul / li [1] / a / text()”的结果是:[object  文本]。它应该是一个元素。

2 个答案:

答案 0 :(得分:4)

您必须为返回元素指定xpath,而不是文本。因为硒与元素一起使用。

  1. 首先定位元素(使用xpath或css选择器,......)
  2. 然后在元素上调用方法以返回它的文本
  3. 这应该有效:

    print driver.find_element_by_xpath('/html/body/section/article/section[2]/ul/li[1]/a').text
    

    注意:xpath表达式最后不能包含函数text()(或类似的),因为它会导致返回text和selenium needs元素。对于Java中的selenium 2(webdriver)来说确实如此。

答案 1 :(得分:0)

我建议您使用以下“首选属性”来匹配,而不是类。

首选属性是:

  1. ID
  2. 名称
  3. 标题
  4. 由于您的元素具有title属性,因此使用CSS匹配。保存自己的麻烦和眼睛,即xpath。

    print driver.find_element_by_css("a[title='Телефон продавца']").text