是否有可能只获取元素的隐藏文本?

问题描述:

Selenium Webdriver包含一个函数,它只返回元素内的可见文本。我想编写一个函数,它只能得到元素内的隐藏文本(即所有不可见的文本in meaning of Selenium Webdriver W3C spec)。根据这个标准的元素是可见的,只有满足所有以下条件:是否有可能只获取元素的隐藏文本?

  • 的元素必须有一个高度和宽度比0像素更大。
  • 如果该元素或其任何祖先被隐藏或CSS显示属性为none,则该元素不可见。
  • 如果存在将元素移出视口且无法滚动到的CSS3 Transform属性,则该元素不可见。 OPTIONs和OPTGROUP元素被视为特殊情况,当且仅当封闭选择元素可见时,才会将其视为显示。
  • 当且仅当它使用的图像可见时才会显示MAP元素。如果封闭的MAP可见,则会显示地图中的区域。
  • “type = hidden”的任何输入元素都不可见
  • 如果启用Javascript,则任何NOSCRIPT元素都不可见。
  • 如果元素的offsetParents传递闭包中的任何祖先具有固定大小,并且具有“overflow:hidden”的CSS样式,并且该元素的位置不在父级的固定大小范围内,则该元素一定不可见。

是否可以写一个JS函数将返回仅包含内侧元件隐藏的文本?你知道任何包含这种功能的图书馆吗?这种功能会有多慢?

是的,如果您只是在监视display: none,visibility: hidden以及没有大小或甚至绝对/相对位置不在屏幕上,则可以编写此类代码。您必须迭代页面中的每个元素,确定元素是否可见,如果是,则从该元素中的任何文本节点收集文本。

它不会比迭代文档中每个节点的任何其他函数更慢或更快。总时间将取决于迭代代码的写入效率(例如,它可以跳过隐藏元素的所有子代)以及文档的长度/复杂程度。

如果您希望能够区分具有溢出的元素边缘之外的文本:隐藏或可能标记为可见的元素,但不在屏幕外或视图之外或不在视图之外目前可查看的滚动区域或可能被其他元素遮挡的文本片段,这将非常困难和诚实,我不知道是否所有这些都可以从纯JavaScript中找到。