繁体   English   中英

CasperJS遍历每个URL

[英]CasperJS looping through each URL

这个问题是相似 别人 ,但我有问题是更基本的。

这是我的代码:

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();

我知道links是从Quickstart复制而来的,但是我随后对其进行了修改,以打开找到的所有链接。

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

~ $ casperjs casper-google-disco.js

最终,修复很容易,但是我花了好长时间才找到它,因为没有错误,而且似乎没有其他人找到此修复程序。

问题是在调用each变量之前未设置links变量。 each放在then函数中可以解决我的问题。

each.js示例中的each.js示例有助于确认您可以遍历数组而无需IIFE

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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM