CasperJS每隔x秒检查一次页面,直到满足条件

时间:2015-01-04 21:14:54

标签: javascript casperjs

我想在CasperJS中每x(可配置)秒检查一个页面。如果存在某个页面元素,则脚本将在退出之前继续执行一些额外的步骤。否则它会每隔x秒继续检查一次。可以使用什么代码构造?

如果存在(很少列出的)项目,则任务正在检查特定的易趣商店。问题本质上是如何构造一个与CasperJS承诺兼容的while循环。它需要刷新页面。

1 个答案:

答案 0 :(得分:4)

由于CasperJS的步骤函数(then*wait*)是异步的,并且JavaScript没有阻塞sleep函数,因此使用递归很容易解决这个问题。

function check(){
    if (this.getHTML().indexOf('some item') !== -1) {
        this.echo("found");
    } else {
        this.wait(x*1000).thenOpen(url).then(check);
    }
}

casper.start(url, check).run();

另一种方法是使用setInterval,但是当你使用它时,你将跳出CasperJS控制流。您还必须阻止CasperJS退出。这是通过将回调传递给run(它可以为空)来完成的。

casper.start(url, function(){
    setInterval(function(){
        casper.thenOpen(url, function(){
            if (this.getHTML().indexOf('some item') !== -1) {
                this.echo("found");
                this.exit();
            }
        });
    }, x*1000);
}).run(function(){});