이 코드는 dynamic.js 스크립트를 확장합니다. dynamic.js는 다음과 같이 실행됩니다. start
, then
, run
및 run
콜백은 동적 인 loop
입니다. 괜찮아. 내 코드는 run
콜백의 끝에서 반복하고 싶지 않습니다. 중간에 루프를 만들고 싶어하므로 이후에 더 많은 코드를 실행할 수 있습니다. 따라서 start
, then
, loop
, then
, run
입니다. 종료하기 전에 loop
이 완료 될 때까지 casper
이 완료 될 때까지 기다리지 않는 것 같습니다. 루프는 실행될 때마다 다른 지점에서 끝나고, 나는 결코 "after dynamic 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 코드는 중첩 된 '시작'처럼 보이지만 콜백 일뿐입니다. 당신의 도움을 주셔서 감사합니다. – MattDiamant
'casper.run'이 완료되면 스크립트가 종료됩니다. 당신이 CasperJS 제어 흐름을 벗어나면 흐름의 붕괴와 나란히 기다려야합니다. 이것은 일반적으로 필요하지 않습니다. Btw, ** dynamic.js **는 무엇입니까? 웹에서 찾은 스크립트 또는 작성한 스크립트입니까? –
캐스퍼와 함께 제공되는 샘플 스크립트 폴더의 스크립트입니다. – MattDiamant