Göre CasperJS Belgeler :
then()
İmza: then(Function then)
Bu yöntem, basit bir işlev sağlayarak yığına yeni bir gezinme adımı eklemenin standart yoludur:
casper.start('http://google.fr/');
casper.then(function() {
this.echo('I\'m in your google.');
});
casper.then(function() {
this.echo('Now, let me write something');
});
casper.then(function() {
this.echo('Oh well.');
});
casper.run();
İhtiyaç duyduğunuz kadar adım ekleyebilirsiniz. Geçerli Casperörneğin thisanahtar kelimeyi sizin için adım işlevlerinde otomatik olarak bağladığını unutmayın.
Tanımladığınız tüm adımları çalıştırmak için run()yöntemi çağırın ve tamamlayın .
Not: Sen gerekir start()sırayla Casper örneği kullanmak için then()yöntem.
Uyarı: Eklenen adım işlevleri then()iki farklı durumda işlenir:
- önceki adım işlevi yürütüldüğünde,
- önceki ana HTTP isteği yürütüldüğünde ve sayfa yüklendiğinde ;
Yüklenen sayfanın tek bir tanımı olmadığını unutmayın ; DOMReady olayı tetiklendiğinde mi? "Tüm istekler tamamlanıyor" mu? "Tüm uygulama mantığı gerçekleştiriliyor" mu? Veya "işlenen tüm öğeler"? Cevap her zaman içeriğe bağlıdır. Bu nedenle, waitFor()gerçekte ne beklediğiniz üzerinde açık bir kontrol sağlamak için her zaman aile yöntemlerini kullanmaya teşvik ediliyorsunuz .
Yaygın bir numara kullanmaktır waitForSelector():
casper.start('http://my.website.com/');
casper.waitForSelector('#plop', function() {
this.echo('I\'m sure #plop is available in the DOM');
});
casper.run();
Perde arkasında, kaynak koduCasper.prototype.then aşağıda gösterilmiştir:
Casper.prototype.then = function then(step) {
"use strict";
this.checkStarted();
if (!utils.isFunction(step)) {
throw new CasperError("You can only define a step as a function");
}
if (this.checker === null) {
step.level = 0;
this.steps.push(step);
} else {
try {
step.level = this.steps[this.step - 1].level + 1;
} catch (e) {
step.level = 0;
}
var insertIndex = this.step;
while (this.steps[insertIndex] && step.level === this.steps[insertIndex].level) {
insertIndex++;
}
this.steps.splice(insertIndex, 0, step);
}
this.emit('step.added', step);
return this;
};
Açıklama:
Diğer bir deyişle, then()navigasyon sürecindeki bir sonraki adımı planlar.
Çağrıldığında then(), adım olarak çağrılacak bir parametre olarak bir fonksiyon geçirilir.
Bir örneğin başlatılıp başlatılmadığını kontrol eder ve başlamadıysa aşağıdaki hatayı görüntüler:
CasperError: Casper is not started, can't execute `then()`.
Ardından, pagenesnenin olup olmadığını kontrol eder null.
Koşul doğruysa, Casper yeni bir pagenesne oluşturur .
Bundan sonra, bir işlev olup olmadığını kontrol etmek then()için stepparametreyi doğrular .
Parametre bir işlev değilse, aşağıdaki hatayı görüntüler:
CasperError: You can only define a step as a function
Ardından, işlev Casper'ın çalışıp çalışmadığını kontrol eder.
Casper çalışmıyorsa, then()adımı kuyruğun sonuna ekler.
Aksi takdirde, Casper çalışıyorsa, önceki adımdan bir seviye daha derin bir alt adım ekler.
Son olarak, then()işlev bir step.addedolay yayınlayarak sona erer ve Casper nesnesini döndürür.
flowcasperjs generali hakkında bir açıklama arıyorum, ancak temelde birevaluateçağrı içinden casper'a başvuramayacağınızı keşfettim . (yani yeni bir url, günlük, yankı vb. açamazsınız). Benim durumumda değerlendirme çağrılıyordu ama dış dünyayla hiçbir şekilde etkileşime girmiyordu.