2013-02-11 35 views
0

我有這段代碼在phantomjs中運行。我不知道爲什麼form.elements一直向我返回null。我在Chrome開發者控制檯上運行了相同的代碼,並獲得了我想要的正確結果。null爲phantomjs中的元素

我很新的JavaScript和一切有關。請說明一下。

var page = require('webpage').create(); 
page.open('http://www.kayak.com', function (status) { 
    if (status !== 'success') { 
     console.log('Unable to access network'); 
    } else { 
     var form = page.evaluate(function(){ 
      return document.getElementById('searchform'); 
     }); 
     console.log(form.elements[2].value); 
    } 
    phantom.exit(); 
}); 

回答

2

您無法通過evaluate傳遞非原始對象。這是在documentation提到:

注:參數和返回值的評估函數必須是一個簡單的原始對象。經驗法則:如果它可以通過JSON序列化,那麼它很好。閉包,函數,DOM節點等不起作用!

雖然這是使用PhantomJS時最常見的錯誤,但這很容易解決。只要確保在evaluate內儘可能完成所有處理,然後返回一個簡單的對象。詳情請仔細研究documentation,並從所有包含的examples中學習。

+0

謝謝你,澄清了很多 – ssb 2013-02-11 19:33:09