【问题标题】:get text() node value with selenium + python使用 selenium + python 获取 text() 节点值
【发布时间】:2013-12-20 22:09:57
【问题描述】:

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

<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: Message: u'Error Message => \'xpath表达式的结果“/html/body/section/article/section[2]/ul/li[1]/a /文本()”是:[对象 文本]。它应该是一个元素。

【问题讨论】:

    标签: python dom text selenium selenium-webdriver


    【解决方案1】:

    您必须指定 xpath 来返回元素,而不是文本。因为硒适用于元素。

    1. 第一个定位元素(使用 xpath 或 css 选择器...)
    2. 然后在元素上调用方法以返回它的文本

    这应该可行:

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

    注意:xpath 表达式最后不能包含函数text()(或类似函数),因为它会导致返回文本和 selenium 需要元素。 Java 中的 selenium 2 (webdriver) 也是如此。

    【讨论】:

    • 不,它也返回空字符串,例如 driver.find_element_by_class_name('button-text').text 我认为因为电话号码是文本节点,而不是内部文本一个
    • hmm,我使用的是 java(不是 python),但是如果你得到空字符串,你可以尝试在 WebElement 对象上调用方法 getAttribute - 在 java 中是这样的:driver.findElement(By.xpath( &lt;some/xpath&gt; )).getAttribute("innerHTML");
    • 嗯,应该可以,但是不行,因为这个网站用未知的方法生成电话号码,并把它放在一个新的文本节点中! get_attribute('innerHTML') 在此按钮上返回先前的值 - '显示数字'。我必须单击此按钮,等待 2 秒并获取新的内部文本(单击后出现的电话号码)-我正确地进行了此操作,并且工作正常。 driver.find_element_by_xpath('/html/body/section/article/section[2]/ul/li[1]/a').text 也可以工作并返回正确的文本,但直到我点击。我认为它是为了保护电话号码,我需要刮掉它们。
    【解决方案2】:

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

    首选属性是:

    1. 身份证
    2. 姓名
    3. 标题

    由于您的元素具有标题属性,因此请使用 CSS 进行匹配。为自己省去麻烦和麻烦,即 xpath。

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

    【讨论】:

      猜你喜欢
      • 2016-04-30
      • 2018-09-29
      • 2014-06-13
      • 2018-08-28
      • 2015-10-21
      • 1970-01-01
      • 2019-04-03
      • 1970-01-01
      • 2014-03-11
      相关资源
      最近更新 更多