无法获得与CasperJS的链接

时间:2015-04-21 18:37:42

标签: javascript screen-scraping casperjs

我尝试运行此代码并获取“未定义”。有没有人知道这段代码有什么问题?

var casper = require('casper').create();

casper.start('http://casperjs.org/', function() {
    this.echo(document.querySelector('a'));
});

casper.run();

2 个答案:

答案 0 :(得分:1)

CasperJS建立在PhantomJS之上,它有两个上下文。内部页面上下文casper.evaluate()是沙箱,是唯一可以访问DOM的页面。

DOM节点无法传递到外部上下文,因此您需要返回可以使用的元素的一些表示形式:

this.echo(this.evaluate(function(){
    return document.querySelector('a').href;
}));

我建议您查看CasperJS函数,这些函数是getElementInfo()getElementAttribute()的抽象函数。

PhantomJS documentation说:

  

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

     

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

答案 1 :(得分:1)

您无法从Node环境访问DOM功能,而无需明确说明。 CasperJS具有evaluate功能:

var casper = require('casper').create();

casper.start('http://casperjs.org/', function() {
    this.echo(this.evaluate(function() {
        //we can now execute DOM functionality
        return document.querySelector('a').toString();
    }));
});

casper.run();