分割为多个功能时,不执行功能

时间:2014-10-18 19:19:40

标签: javascript phantomjs casperjs

我正在使用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的新手,我似乎无法弄清楚我做错了什么。

1 个答案:

答案 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));
});