1
此代碼擴展dynamic.js腳本。 dynamic.js像這樣運行:start
,then
,run
,然後run
回調是動態的loop
。這運行良好。我的代碼不想在回調結束時循環,它想在中間循環,這樣我可以在之後運行更多的代碼。所以它是start
,then
,loop
,then
,run
。看起來casper
沒有等我的loop
在退出之前完成。循環在每次運行時終止於不同的點,並且我從不會看到回顯出來。下面是一些示例輸出(它最終2周8的環之間的任何地方,通常情況下),然後將代碼:動態CasperJS循環隨機迭代終止
輸出:
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();
這是有道理的。我認爲這裏學到的教訓是,如果你想根據頁面結果使Casperjs動態化,那麼你必須在'run'完成後使用回調。我的示例代碼沒有顯示,但這就是我的目標。乍一看,dynamic.js代碼看起來像嵌套'start',但它只是回調。謝謝你的幫助。 – MattDiamant 2014-10-31 15:57:46
如果'casper.run'完成,則腳本終止。如果你打破了CasperJS的控制流程,那麼你必須在流動中斷的同時「等待」。這通常不是必需的。順便說一句,什麼是** dynamic.js **?這是你在網上找到的一些腳本還是你寫的東西? – 2014-10-31 16:06:03
這是casper附帶的示例腳本文件夾中的腳本。 – MattDiamant 2014-11-01 19:39:44