【问题标题】:CasperJS check a page every x seconds until a condition is metCasperJS 每 x 秒检查一次页面,直到满足条件
【发布时间】:2015-01-04 21:14:53
【问题描述】:

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

如果存在(很少列出的)商品,则任务是检查特定的 eBay 商店。问题本质上是如何构建一个与 CasperJS 承诺兼容的 while 循环。这将需要刷新页面。

【问题讨论】:

  • 您需要刷新页面,还是等待某个元素出现?谢谢。
  • 无论如何可能会有所帮助:stackoverflow.com/questions/16807212/…
  • 你为什么不先向我们展示你到目前为止所做的事情。
  • 如果存在(很少列出的)商品,则任务是检查特定的 eBay 商店。问题本质上是如何构建一个与 CasperJS 承诺兼容的 while 循环。 @alecxe 它需要刷新页面。

标签: javascript casperjs


【解决方案1】:

由于 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(){});

【讨论】:

    猜你喜欢
    • 2013-04-24
    • 2021-09-03
    • 2022-01-13
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多