CasperJS循环遍历每个URL

时间:2016-05-16 09:14:55

标签: javascript

这个问题是similar to others,但我遇到的问题更为基本。

这是我的代码:

var links = [];
var casper = require('casper').create();

function getLinks() {
    var links = document.querySelectorAll('div#mw-content-text table.wikitable tbody tr td i b a');
    return Array.prototype.map.call(links, function(e) {
        return 'https://en.wikipedia.org' + e.getAttribute('href');
    });
}

casper.start('https://en.wikipedia.org/wiki/David_Bowie_discography');

casper.then(function() {
    // aggregate results for the 'casperjs' search
    links = this.evaluate(getLinks);
});

casper.each(links, function (self, link) {
    self.thenOpen(fullURL, function () {
        this.echo(this.getTitle() + " - " + link);
    });
});

casper.run();

我知道从Quickstart复制links时会创建~ $ casperjs casper-google-disco.js ,但我会修改它以打开找到的所有链接。

我得到的是没有任何回声,而是输出我期望的每个标题。这就是我调用文件的方式:

links

1 个答案:

答案 0 :(得分:5)

最后解决方案非常简单,但是由于没有任何错误而没有其他人似乎已经找到它,所以我花了很长时间才找到它。

问题是each变量在调用each之前没有设置。将then放在var links = []; var casper = require('casper').create(); function getLinks() { var links = document.querySelectorAll('div#mw-content-text table.wikitable tbody tr td i b a'); return Array.prototype.map.call(links, function(e) { return 'https://en.wikipedia.org' + e.getAttribute('href'); }); } casper.start('https://en.wikipedia.org/wiki/David_Bowie_discography'); casper.then(function() { // aggregate results for the 'casperjs' search links = this.evaluate(getLinks); casper.each(links, function (self, link) { self.thenOpen(link, function () { this.echo(this.getTitle() + " - " + link); }); }); }); casper.run(); 函数中可以解决我的问题。

CasperJS示例中的each.js example有助于确认您可以在不需要IIFE的情况下循环遍历数组。

{{1}}