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 this
anahtar 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, page
nesnenin olup olmadığını kontrol eder null
.
Koşul doğruysa, Casper yeni bir page
nesne oluşturur .
Bundan sonra, bir işlev olup olmadığını kontrol etmek then()
için step
parametreyi 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.added
olay yayınlayarak sona erer ve Casper nesnesini döndürür.
flow
casperjs 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.