2016-11-30 43 views

回答

3

可以使用jsdocument.documentElement.outerHTML將返回當前DOM運行任意JavaScript,因此

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

的伎倆。

+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

冠層是圍繞硒的包裝,它提供了一些有用的輔助函數。但它也可以訪問在你需要他們的情況下,硒IWebElement情況下,通過element function(網頁下半部;還有似乎沒有在該頁面,所以我不能直接鏈接到函數內部錨)。然後,一旦你有IWebElement對象,你的問題就變得類似於this one,這裏的答案似乎是elem.getAttribute("innerHtml")其中elem是您要其內容的elememt(甚至可能是html元素)。請注意0​​屬性是而不是一個標準的DOM屬性,所以這不適用於所有的Selenium驅動程序;它將取決於您運行的瀏覽器。但它顯然適用於所有主要的Web瀏覽器。

有關使用Python的相關問題,請參閱Get HTML Source of WebElement in Selenium WebDriver using Python,其中有更多關於innetHtml屬性是否適用於所有瀏覽器的討論。如果沒有,雨棚js功能,你可以利用運行一些JavaScript得到你正在尋找的HTML - 但如果您遇到麻煩,你可能要問一個Javascript的問題,而不是一個F#的問題。

+0

當我嘗試添加'讓HTML元素=「HTML」 |> string',它拋出'NoSuchWindowException',這是奇怪的,因爲應在生成的HTML頁面的HTML元素。 – bugfoot

+0

當您在瀏覽器中加載該頁面時會發生什麼情況,然後打開開發工具查看其內容?它有一個「html」元素嗎? – rmunn

+0

另外,你爲什麼要在那裏做'|>字符串?這個想法是獲得'IWebElement' **對象**並使用它的屬性;將其轉換爲字符串似乎適得其反。 – rmunn