Selenium Webdriver包含一个只返回元素内可见文本的函数。我想编写一个只能在元素中获取隐藏文本的函数(即所有不可见的文本in meaning of Selenium Webdriver W3C spec)。根据此规范元素仅在满足以下所有条件时才可见:
- 元素的高度和宽度必须大于0px。
- 如果该元素或其任何祖先被隐藏或具有无显示的CSS显示属性,则该元素不可见。
- 如果存在将元素移出视口但无法滚动到的CSS3 Transform属性,则该元素必须不可见。 OPTION和OPTGROUP元素被视为特殊情况,当且仅当封闭的select元素可见时才会被视为显示。
- 当且仅当其使用的图像可见时,才会显示MAP元素。如果封闭的MAP可见,则会显示地图中的区域。
- “type = hidden”的任何INPUT元素都不可见
- 如果启用了Javascript,则任何NOSCRIPT元素都不可见。
- 如果元素的offsetParents的传递闭包中的任何祖先具有固定大小,并且CSS样式为“overflow:hidden”,并且元素的位置不在父级的固定大小内,则元素必须不可见。
是否可以编写一个只返回元素中包含的隐藏文本的JS函数?你知道任何包含这种功能的库吗?这种功能有多慢?
答案 0 :(得分:3)
是的,如果您只是监控display: none
,visibility: hidden
并且没有大小甚至屏幕外的绝对/相对位置,则可以编写此类代码。您必须迭代页面中的每个元素,确定元素是否可见,如果是,则从该元素中的任何文本节点收集文本。
它不会比迭代文档中每个节点的任何其他函数更慢或更快。总时间将取决于迭代代码的写入效率(例如,它可以跳过隐藏元素的所有子元素)以及文档的长度/复杂程度。
如果您希望能够分辨出具有溢出的元素边缘之外的文本之间的区别:隐藏或可能标记为可见性的元素,但是在屏幕外或不在视野范围内或超出当前范围的元素可查看的滚动区域或可能被其他元素遮挡的文本片段,这将是非常困难和诚实的我不知道是否所有这些都可以从纯JavaScript中找出。