【问题标题】:Get text of an element when it has more elements with text当元素有更多带有文本的元素时获取元素的文本
【发布时间】:2018-11-23 10:03:47
【问题描述】:

我在 Python 和 Firefox 中使用 Selenium,我想在 HTML 的下一部分中获取文本“TextB”,我尝试过使用element.get_attribute('textContent'),但它也需要“TextA”,有没有任何形式的获取只有那个文字?

<p class="class_name" id="id_name">
    <i class="class_name2"></i>
    <b>TextA</b>
    TextB
</p>

【问题讨论】:

  • 您还想考虑(接受)一个更 Pythonic 的答案吗?我可以建造一个……
  • 是的,当然,请

标签: html python-3.x selenium


【解决方案1】:

尝试仅获取最后一个孩子的文本内容

element = driver.find_element_by_id('id_name')
driver.execute_script('return arguments[0].lastChild.textContent', element)

【讨论】:

  • 这行得通,但不是任何其他不暗示执行javascript的形式吗?虽然,就效率而言,执行 javascript 会影响 python 代码吗?我的意思是,如果您可以在一个使用 javascript 的选项和另一个不使用 javascript 的选项之间进行选择,有没有比另一个更好的选项?
  • @JaumeGarciaSanchez 没有其他选项可以直接提取文本节点的值,因为 Selenium 不支持 XPath 语法 //p/text() (应该做你想做的事)。您也可以尝试获取完整的段落字符串值,然后将其拆分,但它似乎效率不高。另一种方法是删除子节点ib,但也需要执行JavaScript(或获取innerHTML并使用第三方库删除节点)。所以恕我直言,这是在您的具体情况下提取文本的最佳方法
【解决方案2】:

根据您提供的 HTML,以更 Pythonic 的方式提取文本 TextB 将是使用 splitlines() 方法如下:

myText = driver.find_element_by_xpath("//p[@class='class_name' and @id='id_name']").get_attribute("innerHTML").splitlines()[3]

【讨论】:

    【解决方案3】:

    下面给你TextA,它是b标签的文本

    driver.find_element_by_xpath("//p[@class='class_name']/b").text;
    

    下面给你TextB,它是p标签的文本

    driver.find_element_by_xpath("//p[@class='class_name']").text;
    

    【讨论】:

    • 它给了我一个错误:'FirefoxWebElement' object has no attribute 'get_text'
    • 你能发布你的代码和html内容吗?请问您的具体期望是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    • 2016-02-29
    • 2012-04-14
    相关资源
    最近更新 更多