在 python 3.6 中 - 使用 xpath 获取文本
in python 3.6 - getting text using xpath
<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")
我的输出如下:
and then have a tea or coffee on the balcony of the cafeteria.
如您所见,它无法识别不间断 space。
该字符已被识别,但正在转换为正常 space (u"\x20"
)。
根据 comment in the java selenium sourcecode, .text
/ .getText()
returns the visible text, and references the w3c webdriver specification,“11.3.5 获取元素文本”部分(重点由我添加):
The Get Element Text command intends to return an element’s text “as
rendered”. An element’s rendered text is also used for locating a
elements by their link text and partial link text.
One of the major inputs to this specification was the open source
Selenium project. This was in wide-spread use before this
specification written, and so had set user expectations of how the Get
Element Text command should work. As such, the approach presented here
is known to be flawed, but provides the best compatibility with
existing users.
很可能,这种行为符合规范,但我还找不到专门用常规白色 space 替换不间断 spaces 的源代码。我在 selenium 存储库中也找不到问题,但也许您可以打开一个来尝试一下。
匹配u"\xa0"
使用
textInDivTag = texts.get_attribute('innerText')
匹配u"\x20"
使用
textInDivTag = texts.text
不间断Space (
)
不间断的 space 即
是不会换行的 space。由不间断 space 分隔的两个单词会粘在一起(不会换行)。当打破单词可能会造成破坏时,这很方便。示例:
- § 10
- 10 km/h
- 晚上 10 点
不间断 space 的另一个常见用途是防止浏览器截断 HTML 页面中的 spaces。如果您在文本中写了 10 个 space,浏览器将删除其中的 9 个。要向您的文本添加真正的 space,您可以使用
字符实体。
Element.innerHTML
语法:
const content = element.innerHTML;
element.innerHTML = htmlString;
值:Element.innerHTML
是一个包含元素后代的 HTML 序列化的 DOMString。设置 innerHTML 的值会删除元素的所有后代,并用通过解析字符串 htmlString.
中给出的 HTML 构造的节点替换它们
注意:如果<div>
、<span>
或<noembed>
节点的子文本节点包含字符 (&
), (<
), or (>
), innerHTML returns 这些字符作为 HTML 个实体 &
、<
和 >
分别。使用 Node.textContent 获取这些文本节点内容的原始副本。
Node.innerText
Node.innerText
是一个 属性 表示节点及其后代的 rendered 文本内容。作为 getter,它近似于用户使用光标突出显示元素的内容然后复制到剪贴板时将获得的文本。
Node.textContent
Node.textContent
属性表示节点及其后代的文本内容。
语法:
var text = element.textContent;
element.textContent = "this is some sample text";
描述:
textContent
returns null
如果节点是文档、DOCTYPE 或符号。要获取整个文档的所有文本和 CDATA 数据,可以使用 document.documentElement.textContent
.
- 如果节点是 CDATA 部分、注释、处理指令或文本节点,
textContent
returns 此节点内的文本(节点值)。
- 对于其他节点类型,textContent returns 每个子节点的 textContent 的串联,不包括注释和处理指令。如果节点没有子节点,则这是一个空字符串。
这个用例
因为你的用例是检查网站是否包含
你必须使用 textContent
属性如下:
texts = driver.find_element_by_xpath("//div[@class='card-block cms']")
textInDivTag = texts.extContent
print(textInDivTag)
<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")
我的输出如下:
and then have a tea or coffee on the balcony of the cafeteria.
如您所见,它无法识别不间断 space。
该字符已被识别,但正在转换为正常 space (u"\x20"
)。
根据 comment in the java selenium sourcecode, .text
/ .getText()
returns the visible text, and references the w3c webdriver specification,“11.3.5 获取元素文本”部分(重点由我添加):
The Get Element Text command intends to return an element’s text “as rendered”. An element’s rendered text is also used for locating a elements by their link text and partial link text.
One of the major inputs to this specification was the open source Selenium project. This was in wide-spread use before this specification written, and so had set user expectations of how the Get Element Text command should work. As such, the approach presented here is known to be flawed, but provides the best compatibility with existing users.
很可能,这种行为符合规范,但我还找不到专门用常规白色 space 替换不间断 spaces 的源代码。我在 selenium 存储库中也找不到问题,但也许您可以打开一个来尝试一下。
匹配u"\xa0"
使用
textInDivTag = texts.get_attribute('innerText')
匹配u"\x20"
使用
textInDivTag = texts.text
不间断Space (
)
不间断的 space 即
是不会换行的 space。由不间断 space 分隔的两个单词会粘在一起(不会换行)。当打破单词可能会造成破坏时,这很方便。示例:
- § 10
- 10 km/h
- 晚上 10 点
不间断 space 的另一个常见用途是防止浏览器截断 HTML 页面中的 spaces。如果您在文本中写了 10 个 space,浏览器将删除其中的 9 个。要向您的文本添加真正的 space,您可以使用
字符实体。
Element.innerHTML
语法:
const content = element.innerHTML; element.innerHTML = htmlString;
值:
Element.innerHTML
是一个包含元素后代的 HTML 序列化的 DOMString。设置 innerHTML 的值会删除元素的所有后代,并用通过解析字符串 htmlString. 中给出的 HTML 构造的节点替换它们
注意:如果
<div>
、<span>
或<noembed>
节点的子文本节点包含字符 (&
), (<
), or (>
), innerHTML returns 这些字符作为 HTML 个实体&
、<
和>
分别。使用 Node.textContent 获取这些文本节点内容的原始副本。
Node.innerText
Node.innerText
是一个 属性 表示节点及其后代的 rendered 文本内容。作为 getter,它近似于用户使用光标突出显示元素的内容然后复制到剪贴板时将获得的文本。
Node.textContent
Node.textContent
属性表示节点及其后代的文本内容。
语法:
var text = element.textContent; element.textContent = "this is some sample text";
描述:
textContent
returnsnull
如果节点是文档、DOCTYPE 或符号。要获取整个文档的所有文本和 CDATA 数据,可以使用document.documentElement.textContent
.- 如果节点是 CDATA 部分、注释、处理指令或文本节点,
textContent
returns 此节点内的文本(节点值)。 - 对于其他节点类型,textContent returns 每个子节点的 textContent 的串联,不包括注释和处理指令。如果节点没有子节点,则这是一个空字符串。
这个用例
因为你的用例是检查网站是否包含
你必须使用 textContent
属性如下:
texts = driver.find_element_by_xpath("//div[@class='card-block cms']")
textInDivTag = texts.extContent
print(textInDivTag)