我有这段代码:
var casper = require('casper').create();
var startID = 21;
var endID = 13533;
while (startID <= endID) {
scrapPages(startID);
startID++;
}
function scrapPages(i) {
var str = "Starting to get the HTML for the problem" + i;
console.log(str);
var url = 'http://community.topcoder.com/stat?c=problem_statement&pm=' + i;
casper.start(url, function() {
this.echo(startID);
var result = this.getHTML('td.problemText');
casper.then(function() {
var fileName = 'problem' + i + ".html";
require('fs').write(fileName, result, 'w');
this.echo("writing it to filename: " + fileName)
});
});
}
casper.run();
我所做的就是尝试解析Topcoder的所有问题。我相信这个问题不是关于Javascript Closures问题的重复。
问题是,函数scrapPages
只运行一次,即while
循环的最后一次迭代。
有人可以帮我解释为什么会这样吗?
答案 0 :(得分:1)
您有很多start
个,但只有一个run
。两者都应该使用一次。您可以在循环开始前调用start
而不参数,然后将casper.start
内的scrapPages
更改为casper.thenOpen
。
您可以进入code进行验证。调用start
时,所有先前安排的步骤都将丢失。