2013-02-11 102 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