<div class = "card-block cms>
<p>and then have a tea or coffee on the balcony of the cafeteria.</p>
<p> </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")
我的输出如下:
然后在自助餐厅的阳台上喝茶或咖啡。
正如您所看到的,它不识别非中断空格。
3条答案
按热度按时间byqmnocz1#
字符被识别,但将被转换为普通空格(
u"\x20"
)。根据Java Selenium源代码中的注解,
.text
/.getText()
返回可见文本,并引用W3C webdriver规范的“11.3.5获取元素文本”部分(强调部分由我添加):“获取元素文本“命令用于返回元素的”呈现“文本。元素的呈现文本也用于通过链接文本和部分链接文本定位元素。
本规范的主要输入之一是开源的Selenium项目。在编写本规范之前,Selenium项目已经广泛使用,因此用户对Get Element Text命令的工作方式有了一定的期望。因此,这里介绍的方法虽然有缺陷,但对现有用户提供了最佳的兼容性。
因此,这种行为可能符合规范,但我还没有找到专门将不间断空格替换为常规空格的源代码。我也没有在Selenium存储库中找到问题,但也许您可以打开一个来尝试一下。
ffx8fchx2#
要匹配
u"\xa0"
,请使用要匹配
u"\x20"
,请使用ubof19bj3#
不间断空格(
)不换行空格(如**
**)是不会换行的空格。由不换行空格分隔的两个单词将粘在一起(不会换行)。当单词的换行可能会造成中断时,这很方便。示例:不换行空格的另一个常见用途是防止浏览器截断HTML页中的空格。如果在文本中写入10个空格,浏览器将删除其中的9个。要在文本中添加实际空格,可以使用**
**字符实体。元素.内部HTML
Element.innerHTML
**是包含元素后代的HTML序列化的DOMString。设置innerHTML的值将删除元素的所有后代,并将其替换为通过分析字符串htmlString中给定的HTML而构造的节点。<div>
、<span>
或<noembed>
节点具有包含字符的子文本节点(x 1m 7 n 1x),(<
),或(>
),innerHTML将这些字符作为HTML实体返回**&
,* *<
和>
。使用Node. textContent获取这些文本节点内容的原始副本。节点内部文本
Node.innerText
是一个属性,表示节点及其后代的呈现的文本内容。作为getter,它近似于用户在用光标突出显示元素的内容并将其复制到剪贴板时将获得的文本。节点. text内容
Node.textContent
属性表示节点及其后代的文本内容。textContent
返回null
。要获取整个文档的所有文本和CDATA数据,可以使用document.documentElement.textContent
。textContent
返回此节点内的文本(nodeValue)。此用例
由于您的用例是检查网站是否包含**
,因此必须按如下方式使用textContent
**属性: