我正在使用casperJS编写脚本,我有这个功能:
Extractor.prototype.get_links = function() {
var links = document.querySelectorAll('p.title a');
return Array.prototype.map.call(links, function(element) {
return element.getAttribute('href');
});
};
工作正常,我得到了理想的结果。但是当我尝试创建一个新函数并调用它时,就像这样:
function test_this() {
var links = document.querySelectorAll('p.title a');
return Array.prototype.map.call(links, function(element) {
return element.getAttribute('href');
});
};
Extractor.prototype.get_links = function() {
test_this();
};
这是我的casper.start方法:
casper.start(webpage, function() {
var extractor = new Extractor();
links = links.concat(this.evaluate(extractor.get_links));
});
似乎没有调用该函数,我没有得到所需的结果。我是casperJS和javascript的新手,我似乎无法弄清楚我做错了什么。
答案 0 :(得分:0)
casper.evaluate
是沙箱。它是页面上下文的接口。在页面上下文之外定义的变量无法在外部访问。
在您的情况下,test_this
是在页面上下文之外定义的。如果你真的想要这种分离,你可以通过单独的evaluate
来定义它:
casper.start(webpage, function() {
this.evaluate(function(){
function test_this() {
var links = document.querySelectorAll('p.title a');
return Array.prototype.map.call(links, function(element) {
return element.getAttribute('href');
});
}
});
var extractor = new Extractor();
links = links.concat(this.evaluate(extractor.get_links));
});