我在phantomjs中运行了这段代码。我不知道为什么form.elements一直给我返回null。我在chrome开发者控制台上运行了同样的代码,得到了我想要的正确结果。
我对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();
});
不能通过evaluate
传递非基元对象。文件中提到了这一点:
注意:evaluate函数的参数和返回值必须是一个简单的基元对象。经验法则:如果它可以通过JSON进行序列化,那么它就可以了。闭包、函数、DOM节点等将不起作用!
尽管这是使用PhantomJS时最常见的错误,但这很容易解决。只要确保在evaluate
中尽可能多地执行所有处理,然后返回一个简单的对象。有关详细信息,请仔细研究文档,并从所有包含的示例中学习。