[英]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.