【问题标题】:Is it possible to get only hidden text of an element?是否可以仅获取元素的隐藏文本?
【发布时间】:2013-02-25 20:56:48
【问题描述】:

Selenium Webdriver 包含一个仅返回元素内可见文本的函数。我想编写一个函数,只获取元素内的隐藏文本(即所有不可见的文本in meaning of Selenium Webdriver W3C spec)。根据此规范,元素只有在满足以下所有条件时才可见:

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

是否可以编写一个只返回包含在元素内的隐藏文本的 JS 函数?您知道任何包含此类功能的库吗?这样的功能会有多慢?

【问题讨论】:

    标签: javascript css html selenium webdriver


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-12-06
      • 2021-12-06
      • 2018-07-16
      • 1970-01-01
      • 1970-01-01
      • 2013-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多