循环遍历for循环时,Casperjs始终使用相同的数组条目

时间:2014-11-05 11:35:21

标签: javascript arrays download casperjs

我有casperjs / phantomjs的问题。我写了一个脚本来收集网站上的所有.xls / .xlsx文件。那很有效。现在我已经扩展了我的脚本,从预定义的url数组中收集这些文件。我遇到的奇怪的事情是下载实际上是有效的。我想将其中一个站点的所有文件保存在一个单独的文件夹中,该文件夹相应地命名为收集文件的网站。

示例:所有文件 http://minerals.usgs.gov/minerals/pubs/commodity/aluminum/ 应保存在文件夹... \ Data \ _铝\

中 奇怪的是(即使下载工作),脚本仍然只使用数组中的一个地址(确切地说是最后一个地址)。因此,所有文件都存储在以用于收集文件的最后一个网站命名的文件夹中。

我希望你能明白我的意思。在下面你找到我的代码......

var links = [];
var index;

var url = {
'abrasives': 'http://minerals.usgs.gov/minerals/pubs/commodity/abrasives/',
'aluminum': 'http://minerals.usgs.gov/minerals/pubs/commodity/aluminum/',
'antimony': 'http://minerals.usgs.gov/minerals/pubs/commodity/antimony/'
};
var casper = require('casper').create();

function getLinks() {
    var links = document.querySelectorAll('a');
    return Array.prototype.map.call(links, function(e) {
        return e.getAttribute('href');
    });
}

casper.start('http://google.com', function() {
    for(var k in url){
        this.thenOpen(url[k], function(){
            var j=0;
            if(url.hasOwnProperty(k)){
                this.echo("Key is " + k + ",value is " + url[k]);
                links = this.evaluate(getLinks);
                this.echo(links.length + ' Links gefunden...');
                for(index= 0; index < links.length;index++){
                    if ((new RegExp('.xls')).test(links[index]) || (new RegExp('.xlsx')).test(links[index])) {
                        j++;
                        var folder = url[k].split('/');
                        // the next line was for testing purposes 
                        this.echo(folder[6]);
                        var filename = links[index].replace(/^.*[\\\/]/, '')        
                        this.echo(j + ' Excel-Files found at ' + this.getTitle() + "!");
                        this.download(links[index],'Data\\' + folder[folder.length] + '\\'+filename);
                    }
                }
            }
        });
    }
});

casper.run(function() {
    this.echo('All files stored at C:\\User\\Username\\Data\\ .');
    this.echo('End...').exit();
});

0 个答案:

没有答案