在 Python 3.6 中 - 使用 XPath 表达式获取文本

问题描述 投票:0回答:3
python python-3.x selenium-webdriver non-breaking-characters
3个回答
0
投票

字符被识别,但正在转换为普通空格(

u"\x20"
)。

根据Java Selenium源代码中的注释

.text
/
.getText()
返回可见文本,并参考了W3C webdriver规范,“11.3.5获取元素文本”部分(重点是我加的):

获取元素文本命令旨在返回一个元素的文本“作为 呈现”。元素的呈现文本也用于定位 元素的链接文本和部分链接文本。

本规范的主要输入之一是开源 硒项目。在此之前广泛使用 编写的规范,因此设定了用户对如何获取的期望 元素文本命令应该有效。 因此,此处介绍的方法 已知是有缺陷的,但提供了最好的兼容性 现有用户。

很可能,这种行为符合规范,但我还找不到专门用常规空格替换不间断空格的源代码。我在 Selenium 存储库中也找不到问题,但也许您可以打开一个来尝试一下。


0
投票

不间断空间 (
 
)

不间断空格即

 
是不会换行的空格。由不间断空格分隔的两个词会粘在一起(不会换行)。当打破单词可能会造成破坏时,这很方便。例子:

  • § 10
  • 10 公里/小时
  • 晚上10点

不间断空格的另一个常见用途是防止浏览器截断 HTML 页面中的空格。如果您在文本中输入 10 个空格,浏览器将删除其中的 9 个。要在文本中添加真实空格,您可以使用

 
字符实体。


元素.innerHTML

  • 语法:

    const content = element.innerHTML;
    element.innerHTML = htmlString;
    
  • Value:

    Element.innerHTML
    是一个包含元素后代的 HTML 序列化的 DOMString。设置 innerHTML 的值会删除元素的所有后代,并将它们替换为通过解析字符串 htmlString 中给出的 HTML 构造的节点。

  • 注意:如果

    <div>
    <span>
    <noembed>
    节点具有包含字符 (
    &
    )、(
    <
    ) 或 (
    >
    ) 的子文本节点,则 innerHTML 分别将这些字符作为 HTML 实体
    &amp;
    &lt;
    &gt;
    返回。使用 Node.textContent 获取这些文本节点内容的原始副本。


Node.innerText

Node.innerText
是表示节点及其后代的 rendered 文本内容的属性。作为一个 getter,它近似于用户在用光标突出显示元素的内容然后复制到剪贴板时会得到的文本。


Node.textContent

Node.textContent
属性表示节点及其后代的文本内容。

  • 语法:

    var text = element.textContent;
    element.textContent = "this is some sample text";
    
  • 说明:

  • textContent
    如果节点是文档、DOCTYPE 或符号,则返回
    null
    。要获取整个文档的所有文本和 CDATA 数据,可以使用
    document.documentElement.textContent
    .
  • 如果节点是 CDATA 部分、注释、处理指令或文本节点,
    textContent
    返回此节点内的文本(节点值)。
  • 对于其他节点类型,textContent 返回每个子节点的textContent 的串联,不包括注释和处理指令。如果节点没有子节点,则这是一个空字符串。

这个用例

因为你的用例是检查网站是否包含

&nbsp;
你必须使用
textContent
属性如下:

texts = driver.find_element_by_xpath("//div[@class='card-block cms']")
textInDivTag = texts.extContent
print(textInDivTag)

0
投票

要匹配

u"\xa0"
,使用

textInDivTag = texts.get_attribute('innerText')

要匹配

u"\x20"
,使用

textInDivTag = texts.text
© www.soinside.com 2019 - 2024. All rights reserved.