1
<div class = "card-block cms>
<p>and then have a tea or coffee on the balcony of the cafeteria.</p>
<p>&nbsp;</p>
</div>

我正在尝试检查我抓取的网站文本是否包含  

texts = driver.find_element_by_xpath("//div[@class='card-block cms']")
textInDivTag = texts.text
print(textInDivTag)
if u"\xa0" in textInDivTag:
    print("yes")

我的输出如下:

然后在自助餐厅的阳台上喝杯茶或咖啡。

如您所见,它无法识别不间断的空间。

4

3 回答 3

0

匹配u"\xa0"使用

textInDivTag = texts.get_attribute('innerText')

匹配u"\x20"使用

textInDivTag = texts.text
于 2018-11-08T10:25:20.577 回答
0

不间断空格 ( &nbsp;)

不间断空格,即&nbsp;不会换行的空格。由不间断空格分隔的两个单词将粘在一起(不换行)。当破坏单词可能具有破坏性时,这很方便。例子:

  • § 10
  • 10公里/小时
  • 下午10点

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


元素.innerHTML

  • 句法:

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

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


Node.innerText

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


节点文本内容

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

  • 句法:

    var text = element.textContent;
    element.textContent = "this is some sample text";
    
  • 描述:

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

这个用例

由于您的用例是检查网站是否包含&nbsp;您必须使用以下textContent属性:

texts = driver.find_element_by_xpath("//div[@class='card-block cms']")
textInDivTag = texts.extContent
print(textInDivTag)
于 2018-11-13T10:54:08.460 回答
0

该字符已被识别,但正在转换为普通空格 ( u"\x20")。

根据java selenium源代码中的注释.text/.getText()返回可见文本,并引用w3c webdriver规范,“11.3.5获取元素文本”部分(我添加的重点):

获取元素文本命令旨在返回元素的文本“呈现”。元素的渲染文本还用于通过其链接文本和部分链接文本来定位元素。

该规范的主要输入之一是开源 Selenium 项目。在编写本规范之前,它已被广泛使用,因此设定了用户对 Get Element Text 命令应该如何工作的期望。因此,这里介绍的方法已知存在缺陷,但提供了与现有用户的最佳兼容性。

因此,这种行为可能符合规范,但我还没有找到专门用常规空格替换不间断空格的源代码。我在 selenium repo 中也找不到问题,但也许你可以打开一个试试。

于 2018-11-07T20:49:18.313 回答