对于phantomjs中的元素为null

时间:2013-02-11 08:17:03

标签: javascript phantomjs

我在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();
});

1 个答案:

答案 0 :(得分:2)

您无法通过evaluate传递非基本对象。这在documentation

中提到
  

注意:evaluate函数的参数和返回值必须是一个简单的原始对象。经验法则:如果它可以通过JSON序列化,那么它很好。闭包,函数,DOM节点等不起作用!

虽然这是使用PhantomJS时最常见的错误,但这很容易解决。只需确保在evaluate内尽可能多地进行所有处理,然后返回一个简单的对象。有关详细信息,请仔细研究documentation,并从所有包含的examples中学习。