Selenium Remote Control には、現在のページのソースを文字列として返す「get_html_source」というメソッドがあります。
私の知る限り、この方法は Firefox と Safari のすべてのケースで機能します。しかし、Internet Explorer で呼び出すと、正しくないソースが返されます。
これが Selenium や Internet Explorer のバグなのか、修正があるのか、誰か知っていますか?
get_html_source がブラウザーの innerHTML プロパティを使用していることは 99% 確信しています。InnerHTML はブラウザのドキュメントの内部表現を返しますが、プラットフォーム間で常に一貫性がなく、「不安定」でした。
ページの body タグに次の onload 属性を一時的に追加することで、これをテストできます。
onload="var oArea = document.createElement('textarea');oArea.rows=80;oArea.cols=80;oArea.value = document.getElementsByTagName('html')[0].innerHTML;document.getElementsByTagName('body')[0].appendChild(oArea)"
これにより、ドキュメントの innerHTML を含むテキスト領域がページの下部に追加されます。同じ「間違った」HTML ソースが表示された場合は、IE が原因であることがわかります。
可能な回避策は、有効なマークアップを求めている場合、HTML Tidy またはその他のクリーナーを介してソースを実行することです。ブラウザー間で一貫したレンダリングを提供するものは何も知りません。
ありがとうアラン。これは別のブラウザーの innerHTML の実装に問題があることがわかりました。
リストに関係するタグの場合
safari や firefox などのブラウザーは、それぞれの innerHTML メソッドで終了タグを取得しますが、Internet Explorer の innerHTML メソッドはそれらを無視します。
リストは構造化されているため、たとえば
HTMLソース文字列の正規表現置換でうまくいくはずです。