gpt4 book ai didi

javascript - 动态 CasperJS 循环在随机迭代时终止

转载 作者:行者123 更新时间:2023-11-30 17:12:41 25 4
gpt4 key购买 nike

此代码扩展了 dynamic.js 脚本。 dynamic.js 是这样运行的:startthenrun,然后 run 回调是动态的循环。运行良好。我的代码不想在 run 回调结束时循环,它想在中间循环,这样我可以在之后运行更多代码。所以它是开始然后循环然后运行。似乎 casper 在退出之前没有等待我的 loop 完成。循环每次运行时都会在不同的点终止,而且我从未看到 "after dynamic loop" 回显。这是一些示例输出(通常在 2 到 8 个循环之间的任何地方结束),然后是代码:

输出:

start main
start dynamic loop
0
Something.
1
Something.
2
Something.
3
Something.
4
Something.
5
Something.

代码:

var casper = require('casper').create();

var limit = 10;
var i = 0;

// dynamic loop
var loop = function () {
if (i < limit) {
this.echo(i);
this.start("http://www.something.com", function() {
this.echo(this.evaluate(function () { return document.body.innerText; }));
});
i++;
this.run(loop);
} else {
this.echo("dynamic loop done");
this.exit();
}
}

// main flow
casper.start('http://www.something.com', function() {
this.echo("start main");
});

casper.then(function () {
casper.start().then(function() {
this.echo("start dynamic loop");
});
casper.run(loop);
});

casper.then(function () {
this.echo("after dynamic loop");
})

casper.run();

最佳答案

您应该在脚本中只使用一次casper.startcasper.run。但是,您可以使用它们。如果你这样做,如果你将它们嵌套在另一个控制流中,你就会遇到“未定义”的行为。我发现最好使用 casper.thenOpencasper.then 来替代 casper.startcasper.run:

// dynamic loop
var loop = function () {
if (i < limit) {
this.echo(i);
i++;
this.thenOpen("http://www.something.com", function() {
this.echo(this.evaluate(function () { return document.body.innerText; }));
});
this.then(loop);
} else {
this.echo("dynamic loop done");
}
}

// main flow
casper.start('http://www.something.com', function() {
this.echo("start main");
});

casper.then(loop);

casper.then(function () {
this.echo("after dynamic loop");
})

casper.run();

您可能在一个脚本中有多个 casper 实例,但是您需要以某种方式同步它们。

您的脚本可能需要在不重构的情况下进行一些修复。只需从循环中删除 this.exit(); 即可。你提前退出。但我仍然强烈建议您重构脚本。

关于javascript - 动态 CasperJS 循环在随机迭代时终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26674263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com