我在casperjs中有一个脚本,如果有可用的话,会检查一个框,然后点击一个按钮继续使用该脚本。
现在,我有一个cronjob,每隔一秒就会激活一次,直到复选框可用。我想要做的是执行脚本并刷新页面,直到复选框可用。
我尝试过一段时间循环但脚本崩溃了,我尝试了重复功能,但是不太理想,因为我不知道有多少次我必须尝试直到该复选框可用。
这是我的脚本,以防你需要它:
casper.start(url1, function(){
this.click('a[title="Chile"]');
});
casper.thenOpen(url2, function() {
if(this.exists('#acepta_terminos')){ //this is where I check the checkbox
seguir=false;
this.click('#acepta_terminos');
this.click('input[type="button"][name="continuar"]');
this.waitForSelector('#contenedor', function(){
this.fillSelectors('form[name="formulario"]',{
'*[name="foid_tipo_1"]' :'NI',
'*[name="foid_numero_1"]' :persona.rut,
},true);
this.click('#id_declaro_input');
this.click('input[type="button"][name="continuar"]');
});
casper.then(function(){
this.capture('4e.png');
});
} //cierre de if exists
});
casper.run();
答案 0 :(得分:1)
这是递归完成的。
function check() {
this.thenOpen(url2, function(){
if(this.exists('#acepta_terminos')){
seguir=false;
this.click('#acepta_terminos');
this.click('input[type="button"][name="continuar"]');
this.waitForSelector('#contenedor', function(){
this.fillSelectors('form[name="formulario"]',{
'*[name="foid_tipo_1"]' :'NI',
'*[name="foid_numero_1"]' :persona.rut,
},true);
this.click('#id_declaro_input');
this.click('input[type="button"][name="continuar"]');
});
casper.then(function(){
this.capture('4e.png');
});
} else {
this.wait(5000, check);
}
});
}
casper.start(url1, function(){
this.click('a[title="Chile"]');
}).then(check).run();
请注意,在函数内部,所有异步函数(then*
和wait*
)都必须在同步函数之后执行(如click
)。