我尝试运行此代码并获取“未定义”。有没有人知道这段代码有什么问题?
var casper = require('casper').create();
casper.start('http://casperjs.org/', function() {
this.echo(document.querySelector('a'));
});
casper.run();
答案 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();