我有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();
});