Javascript Casper JS:TypeError:“null”不是对象

Javascript Casper JS:TypeError:“null”不是对象,javascript,null,phantomjs,typeerror,casperjs,Javascript,Null,Phantomjs,Typeerror,Casperjs,我试图抓住本页上的David Welsh文本: 当我在浏览器控制台中执行document.getElementById'Boundless'。children[0]。children[2]。children[0]。children[1]。children[0]。innerHTML时,我成功地选择了所需的文本,但在Terminal中运行js文件时,出现错误: TypeError:“null”不是计算“document.getElementById'Boundless.”子对象的对象 为什么它在我的

我试图抓住本页上的David Welsh文本:

当我在浏览器控制台中执行document.getElementById'Boundless'。children[0]。children[2]。children[0]。children[1]。children[0]。innerHTML时,我成功地选择了所需的文本,但在Terminal中运行js文件时,出现错误:

TypeError:“null”不是计算“document.getElementById'Boundless.”子对象的对象

为什么它在我的浏览器中工作,而在我的本地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);
            }
        });
    });
});

CasperJS构建在PhantomJS之上,PhantomJS有两个上下文。页面上下文是沙盒。这是访问DOM的唯一方法,您需要使用它

var name = casper.evaluate(function(){
    return document.getElementById('Boundless').children[0].children[2].children[0].children[1].children[0].innerHTML;
});
casper.echo(name);
所有你想在里面使用的东西,你必须明确地传递进来。它无法访问外部定义的变量

政府也有重要的话要说:

注意:参数和evaluate函数的返回值必须是一个简单的基元对象。经验法则:如果可以通过JSON对其进行序列化,那么就可以了

闭包、函数、DOM节点等将不起作用


CasperJS构建在PhantomJS之上,PhantomJS有两个上下文。页面上下文是沙盒。这是访问DOM的唯一方法,您需要使用它

var name = casper.evaluate(function(){
    return document.getElementById('Boundless').children[0].children[2].children[0].children[1].children[0].innerHTML;
});
casper.echo(name);
所有你想在里面使用的东西,你必须明确地传递进来。它无法访问外部定义的变量

政府也有重要的话要说:

注意:参数和evaluate函数的返回值必须是一个简单的基元对象。经验法则:如果可以通过JSON对其进行序列化,那么就可以了

闭包、函数、DOM节点等将不起作用


首先,我要检查thenOpen回调中文档的状态;听起来不是你所期望的。文档是正确的。我让它在抓取文本之前打印出URL,它位于我希望它位于的URL上。它可能有正确的URL,但是,由于各种原因,未能以您期望的状态加载文档…包括浏览器中的页面通过JS进行加载后DOM操作,而当您在casper中打开该页面时,该页面未运行。感谢您的解释!你知道我应该如何检查状态,或者下一步该怎么做吗?就我个人而言,我会在那里设置一个断点,在debug中运行它,然后直接检查document对象的内容;听起来不是你所期望的。文档是正确的。我让它在抓取文本之前打印出URL,它位于我希望它位于的URL上。它可能有正确的URL,但是,由于各种原因,未能以您期望的状态加载文档…包括浏览器中的页面通过JS进行加载后DOM操作,而当您在casper中打开该页面时,该页面未运行。感谢您的解释!你知道我应该如何检查状态或者下一步应该做什么吗?就我个人而言,我会在那里抛出一个断点,在debug中运行它,然后直接检查document对象的内容。