2010-08-18 33 views
1

我使用browsermob和selenium創建腳本以在網站上運行。我試圖用特定名稱來抓取頁面上的所有元素。我的問題是當我嘗試使用window.document.getElementsByName("name"); browsermob說window未定義。你如何定義窗口?用browsermob在selenium中聲明窗口

回答

3

您需要調用selenium.getEval()。該調用的簽名是它需要一個字符串參數,該參數是將在瀏覽器中執行的JavaScript,並返回一個字符串,即返回結果的字符串表示

最後一部分 - 字符串表示 - 很重要。雖然你肯定不能做到這一點在你的BrowserMob腳本:

var elements = window.document.getElementsByName("name"); 

你也可以這樣做:

var elements = selenium.getEval('return window.document.getElementsByName("name")'); 

雖然這第二個例子是更接近你需要做什麼,這不是相當有用,因爲getElementsByName返回一個DOM對象數組,它被轉換爲一個字符串。相反,你很可能需要決定你想用這些元素做什麼,並創建一個更大的JS代碼片段來評估,它會返回你想要的結果。

例如,這將返回第二個鏈接的href屬性頁面:

var secondHref = selenium.getEval('return window.document.getElementsByName("a")[1].href'); 

我希望幫助。您需要了解的主要內容是,雖然BrowserMob腳本可以用JavaScript編寫,但它運行的JavaScript環境在瀏覽器中爲而不是。要評估瀏覽器中的任意JavaScript,您必須通過getEval(),從而創建一些JavaScript中JavaScript的情況,這可能會引起一些混淆。

+0

謝謝。我在詢問它後發現了大部分內容,但我有 selenium.getEval('window.document.getElementsByName(「a」)[1] .href'); 回報是做什麼的? – chromedude 2010-08-19 20:55:25