CasperJS 每 x 秒检查一次页面,直到满足条件
CasperJS check a page every x seconds until a condition is met
我想在 CasperJS 中每 x(可配置)秒检查一个页面。如果某个页面元素存在,那么脚本将在退出前继续执行一些额外的步骤。否则它会继续每 x 秒检查一次。为此可以使用什么代码结构?
该任务正在检查特定的 eBay 商店是否存在(很少列出的)商品。问题本质上是如何构建一个与 CasperJS promises 兼容的 while 循环。需要刷新页面。
由于 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(){});
我想在 CasperJS 中每 x(可配置)秒检查一个页面。如果某个页面元素存在,那么脚本将在退出前继续执行一些额外的步骤。否则它会继续每 x 秒检查一次。为此可以使用什么代码结构?
该任务正在检查特定的 eBay 商店是否存在(很少列出的)商品。问题本质上是如何构建一个与 CasperJS promises 兼容的 while 循环。需要刷新页面。
由于 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(){});