2016-11-30 8 views

答えて

3

document.documentElement.outerHTMLはそう

let html = js "return document.documentElement.outerHTML" |> string 

は、トリックを行い、現在のDOMが返されます。

+0

あなたの答えが見え、有望な振る舞いが、問題はすなわち、それはデフォルトのwebdriverをページの生成されたHTMLコードを返すことである「 webdriverを˛ ...」とありません指定されたURLのこと、どのロードに時間がかかるようです。うまくいけない 'Thread.Sleep'を追加し、ターゲットHTMLがロードされるのを待つためにループすると、' NoSuchWindowException'がスローされます。 – bugfoot

+0

残念ながら、この問題の(単一の)解決策はありません。一般的には、ページ(JavaScriptを含む)のロード/実行が完了したかどうか、または(setTimeoutなどの)待っているアクションや無限のアニメーションだけがあるかどうかを判断することはできません。あなたがページを知っているなら、いくつかの指標を待つことができます: 'waitFor'、' waitForElement'を見てください。 'waitFor(fun() - > js" return document.readyState "|> string =" complete ")' とにかく、これは別の質問でなければなりません。 – CaringDev

+0

実際、私は[IEの必須設定](https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver#required-configuration)を見落としました。すべての設定と 'waitFor'コードで、実際に_generated_ HTMLを保存することができます。大変感謝しています:-) – bugfoot

3

Canopyは、便利なヘルパー機能を提供するSeleniumのラッパーです。しかし、それはまた、element functionを経由してセレンのIWebElementインスタンスへのアクセスを提供します(ページの途中で、そのページに内部アンカーがないので、直接関数にリンクすることはできません)。次に、IWebElementオブジェクトを取得したら、問題はelem.getAttribute("innerHtml")と思われるthis oneに似ています。ここで、elemはコンテンツが必要なエレメントです(htmlの場合もあります)。 innerHtml属性はであり、標準のDOM属性ではないため、これはすべてのSeleniumドライバでは機能しません。どのブラウザを使用しているかに依存します。しかし、明らかにすべての主要なWebブラウザで動作します。

innetHtml属性がすべてのブラウザで機能するかどうかについて、より多くの議論があるPythonを使用して関連する質問についてはGet HTML Source of WebElement in Selenium WebDriver using Pythonを参照してください。そうでなければ、Canopy でもにはjsという機能があります。この機能を使用すると、探しているHTMLを取得するためにJavascriptを利用することができますが、問題がある場合は、 F#の質問ではなくJavascriptの質問。

+0

'let html = element" html "|> string'を追加しようとすると、生成されたHTMLページにhtml要素があるはずなので、奇妙な' NoSuchWindowException'がスローされます。 – bugfoot

+0

ブラウザでそのページを読み込んだ後、開発者ツールを開いてその内容を見るとどうなりますか?それは "html"要素を持っていますか? – rmunn

+0

また、なぜあなたは '|> string'をやっていますか?アイデアは、 'IWebElement' **オブジェクト**を保持し、そのプロパティを使用することです。それを文字列に変換することは非生産的に見えます。 – rmunn

関連する問題