循环刷新页面,直到选择器可用

时间:2015-01-27 21:04:03

标签: javascript phantomjs casperjs

我在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();

1 个答案:

答案 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)。