2015-11-04 25 views
0

我正在編寫一個控制檯應用程序,我正在使用Nreco.PhantomJS來加載數據。這是一個包含帶有標記的谷歌地圖的網站的報廢應用程序。我試圖獲取的數據在完全加載之前或之後在頁面上不可用。數據是從JavaScript函數傳遞到Google地圖的簡單緯度和經度,並且不會在頁面上呈現。由於我對PhantomJS非常陌生,因此我不確定如何實現這一點,但我相信這可以完成。這一小片劇本是由我在C#代碼運行,在PhantomJS中運行JavaScript自定義函數

try 
{ 
    string jsContent = "var system = require('system');" + 
    "var page = require('webpage').create();" + 
    "page.open('" + url + "', function(status) {" + 

     "system.stdout.writeLine(GetLatLang());" + 
    "}"+ 

    "phantom.exit();" + 
    "});"; 

    phantomJS.RunScript(jsContent, null, null, ms); 
} 
finally 
{ 
    phantomJS.Abort(); // ensure that phantomjs.exe is stopped 
} 

當我打電話Alert(GetLatLang())功能在控制檯選項卡(谷歌內部的鍍鉻檢查),那麼它運行的罰款和檢索值。然而,PhantomJS永遠不會完成運行代碼,我必須關閉應用程序。我的理解是,在上面的代碼中,PhantomJS立即嘗試執行GetLatLang()函數,而此時它不可用。頁面完全加載後有沒有辦法執行這個函數?

回答

1

你需要調用GetLatLang()功能在頁面的上下文,而不是在假想背景:

"page.open('" + url + "', function(status) {" + 
    "console.log(page.evaluate(function(){" + 
     "return GetLatLang();" + 
    "}));" + 
"}"+ 

page.evaluate()是提供訪問DOM和頁面的window對象的唯一功能。


此外,你的JavaScript有語法錯誤。只有一個開放{,但兩個關閉}。您需要刪除"}"+

+0

感謝您的指導。您指出的JavaScript錯誤是由於我刪除了幾條不必要的行以使代碼更易於理解。 –