2

Selenium Webdriver には、要素内の可視テキストのみを返す関数が含まれています。要素内の非表示のテキスト (つまり、Selenium Webdriver W3C spec の意味で表示されないすべてのテキスト) のみを取得する関数を作成したいと思います。この仕様によると、要素は次のすべての条件が満たされた場合にのみ表示されます。

  • 要素の高さと幅は 0px より大きい必要があります。
  • その要素またはその祖先のいずれかが非表示であるか、CSS 表示プロパティが none である場合、その要素を表示してはなりません。
  • 要素をビューポートの外に移動し、スクロールできない CSS3 Transform プロパティがある場合、要素が表示されないようにする必要があります。OPTION 要素と OPTGROUP 要素は特殊なケースとして扱われ、囲んでいる select 要素が表示されている場合にのみ表示されると見なされます。
  • MAP 要素は、使用する画像が表示されている場合にのみ表示されます。囲んでいる MAP が表示されている場合、マップ内のエリアが表示されます。
  • 「type=hidden」の INPUT 要素は表示されません
  • Javascript が有効になっている場合は、NOSCRIPT 要素が表示されないようにする必要があります。
  • offsetParents の要素の推移閉包のいずれかの祖先が固定サイズであり、"overflow:hidden" の CSS スタイルを持ち、要素の位置が親の固定サイズ内にない場合、要素を表示してはなりません。

要素内に含まれる非表示のテキストのみを返す JS 関数を作成することは可能ですか? そのような機能を含むライブラリを知っていますか? そのような機能はどれくらい遅くなりますか?

4

1 に答える 1

3

display: noneはい、サイズを監視しているだけで、visibility: hiddenサイズがなく、画面外の絶対/相対位置さえも監視している場合は、このようなコードを記述できます。ページ内のすべての要素を繰り返し、要素が表示されているかどうかを判断し、表示されている場合は、その要素内の任意のテキストノードからテキストを収集する必要があります。

ドキュメント内のすべてのノードを反復処理する他の関数よりも遅くも速くもなりません。合計時間は、反復コードがどれだけ効率的に記述されているか(たとえば、非表示の要素のすべての子をスキップできます)、およびドキュメントの長さ/複雑さに依存します。

オーバーフローのある要素の端の外側にあるテキストの違いを区別できるようにしたい場合:非表示または可視性のためにマークされている可能性があるが、画面外または非表示または現在の表示可能なスクロール領域外にある要素または他の要素によって隠されている可能性のあるテキストの断片、それは非常に困難であり、正直なところ、それらすべてが純粋なjavascriptから理解できるかどうかはわかりません。

于 2013-02-25T20:59:39.287 に答える