Casper JS:TypeError:'null'不是对象

时间:2015-04-27 02:29:36

标签: javascript null phantomjs typeerror casperjs

我想抓住此页面上的“David Welsh”文字:http://foster.uw.edu/faculty-research/directory/david-welsh/

当我在浏览器控制台中document.getElementById('Boundless').children[0].children[2].children[0].children[1].children[0].innerHTML时,我成功选择了我想要的文本,但是当我在终端中运行我的js文件时,我收到错误:

TypeError: 'null' is not an object (evaluating 'document.getElementById('Boundless').children')

为什么这在我的浏览器中工作,而不在我的本地js文件中?

casper.then(function(){
    this.each(links,function(self,link){
        self.thenOpen(link,function(a){
            this.echo(this.getCurrentUrl());
            var name = document.getElementById('Boundless').children[0].children[2].children[0].children[1].children[0].innerHTML;
                casper.echo(name);
            }
        });
    });
});

1 个答案:

答案 0 :(得分:4)

CasperJS建立在PhantomJS之上,它有两个上下文。页面上下文(casper.evaluate())是沙箱。这是访问DOM的唯一方法,您需要使用它。

var name = casper.evaluate(function(){
    return document.getElementById('Boundless').children[0].children[2].children[0].children[1].children[0].innerHTML;
});
casper.echo(name);

你想要在其中使用的所有内容,你必须明确传入。它无法访问外部定义的变量。

PhantomJS documentation也有一些重要的说法:

  

注意: evaluate函数的参数和返回值必须是一个简单的原始对象。经验法则:如果它可以通过JSON序列化,那就没关系了。

     

闭包,函数,DOM节点等将工作!