这是我用来告诉CasperJS解析(单个)网页以获取一组目标链接的片段。
var casper = require('casper').create();
var links;
function getLinks() {
var links = document.querySelectorAll('li.Item div.CoverImageContainer a');
return Array.prototype.map.call(links, function (e) {
return e.getAttribute('href')
});
}
casper.start('https://nypl.overdrive.com/search?mediaType=ebook&subject=111&subject=14&sortBy=newlyadded');
casper.then(function () {
links = this.evaluate(getLinks);
});
casper.run(function () {
this.echo(' - ' + links.join('\n - ')).exit();
});
输出结果如下:
$ casperjs OD-links.js
- /media/3204074
- /media/3691522
- /media/3360010
- ...
现在,我希望CasperJS在提供多个URL(数组)时也能这样做,一次处理一个URL。以下是尝试执行此操作的方法:
var casper = require('casper').create();
var links;
var urls;
function getLinks() {
var links = document.querySelectorAll('li.Item div.CoverImageContainer a');
return Array.prototype.map.call(links, function (e) {
return e.getAttribute('href')
});
}
casper.start('about:blank');
var urls = [
'https://nypl.overdrive.com/search?sortBy=newlyadded&mediaType=ebook&subject=111&subject=14&page=1',
'https://nypl.overdrive.com/search?sortBy=newlyadded&mediaType=ebook&subject=111&subject=14&page=2',
'https://nypl.overdrive.com/search?sortBy=newlyadded&mediaType=ebook&subject=111&subject=14&page=3'
];
casper.each(urls, function(casper, url) {
casper.thenOpen(url, function() {
links = this.evaluate(getLinks);
});
casper.run(function () {
this.echo(' - ' + links.join('\n - ')).exit();
});
});
它几乎可以工作。 CasperJS似乎在解析数组中给出的每个URL,但最后,它只输出从最后一页解析的24个链接,而不是72个(24 * 3个URL)。
如何修复代码?我错过了什么?
(PS:我刚开始学习JS,但需要这个用于个人项目。)
我目前正在使用的临时解决方法:
var casper = require('casper').create();
var links;
function getLinks() {
var links = document.querySelectorAll('li.Item div.CoverImageContainer a');
return Array.prototype.map.call(links, function (e) {
return e.getAttribute('href')
});
}
// THIS lets us use --url argument
casper.start(casper.cli.get('url'));
casper.then(function () {
links = this.evaluate(getLinks);
});
casper.run(function () {
this.echo(' - ' + links.join('\n - ')).exit();
});
所以我的命令变为:
casperjs OD-links.js --url='http://example.com/'