CasperJS再次循环直到获取数据

时间:2014-10-13 19:06:21

标签: javascript web-scraping phantomjs casperjs

我在CasperJS中编写了函数来在TextBox上设置数据,然后单击按钮,然后从页面中提取数据。

var casper = require('casper').create({
verbose: false,
pageSettings: {
    loadImages:  false,
    loadPlugins: false
}
});

casper.start("www.testsite.com", function(){
casper.thenEvaluate(function(){
    document.getElementsByClassName('inputfield')[0].value="set data";//google.com
    document.querySelector('form[name="single_check_form"]').submit();
}).then(function(){
    var data = this.evaluate(function(){
        return document.getElementsByTagName('tr')[13].childNodes[3].innerHTML.replace("- ","").replace("<br>","");
    });
    casper.echo("Data found : "+data);
});
});

上面的函数是工作文件,在点击后我得到'字符串'或'空字符串'但在某些情况下我得到'空'作为结果。

那么,如何循环直到我获取数据?

1 个答案:

答案 0 :(得分:0)

你应该使用递归,因为CasperJS步骤可以嵌套。

var data = null;
function getData(){
    casper.thenOpen("www.testsite.com").thenEvaluate(function(){
        document.getElementsByClassName('inputfield')[0].value="set data";//google.com
        document.querySelector('form[name="single_check_form"]').submit();
    }).then(function(){
        data = this.evaluate(function(){
            return document.getElementsByTagName('tr')[13].childNodes[3].innerHTML.replace("- ","").replace("<br>","");
        });
        if (data == null) {
            getData();
        }
    });
}

casper.start().then(getData).then(function(){
    casper.echo("Data found : "+data);
}).run();