循环刷新页面直到选择器可用
Loop refresh page until selector is available
我在 casperjs 中有一个脚本,它会转到一个网站,选中一个框(如果可用),然后单击一个按钮继续该脚本。
现在我有一个 cronjob,它每秒执行一次直到复选框可用。我想做的是执行脚本并刷新页面,直到复选框可用。
我尝试过 while 循环,但脚本崩溃了,我尝试了 repeat 函数,但并不理想,因为我不知道在复选框可用之前我必须尝试多少次。
这是我的脚本,以备不时之需:
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();
这是递归完成的。
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
)之后执行。
我在 casperjs 中有一个脚本,它会转到一个网站,选中一个框(如果可用),然后单击一个按钮继续该脚本。
现在我有一个 cronjob,它每秒执行一次直到复选框可用。我想做的是执行脚本并刷新页面,直到复选框可用。
我尝试过 while 循环,但脚本崩溃了,我尝试了 repeat 函数,但并不理想,因为我不知道在复选框可用之前我必须尝试多少次。
这是我的脚本,以备不时之需:
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();
这是递归完成的。
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
)之后执行。