2013-09-16 36 views
5

我是JavaScript和PhantomJS的新手,但我的似乎很簡單的目標已經證明比預期更難實現。我想編寫一個腳本來加載網站,然後輸出該頁面上使用的JavaScript變量的值。如果我在瀏覽器中打開該頁面並打開Javascript控制檯,則可以輸入變量名稱,並告訴我與該變量關聯的值。我只是試圖重現這個功能,但與PhantomJS,使我可以自動執行此任務。使用PhantomJS從網站讀取JavaScript變量

有人可以指點我正確的文檔嗎?我一直無法找到如何做這樣的事情,假設PhantomJS是正確的做法。也許有一個更簡單的選擇?

謝謝。

+1

以下其中一項可能會對您有所幫助:https://github.com/ariya/phantomjs/wiki/API-Reference-WebPage#wiki-webpage-evaluate或https://github.com/ariya/phantomjs/wiki/API-Reference-WebPage#onconsolemessage –

回答

15

你需要了解的是phantomJS有兩個 JavaScript環境和那兩個是相互獨立的。內部是文檔腳本(您可以在任何瀏覽器中使用)。外面的一個正在控制幻影應該做什麼。它模擬用戶。

因此,從某種意義上說,您需要告訴phantomJS「用戶打開了任何類型的JavaScript控制檯...」。 evaluate command這樣做。

所以讀取變量foo的價值,你寫這樣的代碼:

var foo = page.evaluate(function() { 
    return document.foo; 
}); 

注:document是不是絕對必要的,但它有助於在開發商的頭上除了保持兩個環境。

+0

我能夠得到這個工作,我不知道你可以評估「另一邊」的全局變量有多棒!整個過程中,我將信息打印在屏幕上的表格上,然後對錶格進行物理評估以獲取信息,這樣更有效率! –

3

亞倫的回答對我不起作用。也許它在2013年有效,但現在(2016年),它不再適用於當前版本。在Aaron的例子中,foo返回一個承諾,而不是一個值。 console.log(foo)輸出Promise { <pending> }

這是我想通了:

page 
    .evaluate(function(){ return window.foo }) 
    .then (function(foo){ console.log "foo = ", foo}); 

現在你真正foo的值。