向下滚动页面事件x秒

时间:2015-09-11 20:00:32

标签: javascript casperjs

我目前可以在CasperJS的帮助下向下滚动页面。我看到了这个article关于如何根据某些属性的可见性滚动无限页面。但是我不想基于元素的可见性,但是想知道是否有一种方法可以设置一个计时器,它应该在退出之前保持向下滚动的时间长度。怎么会这样的事情?

//function to scroll
function tryAndScroll(casper) {
    casper.page.scrollPosition = {
        top: casper.page.scrollPosition["top"] + 40000,
        left: 0
    };
}

/**
 * Everything starts here!
 * I use the mobile version of facebook as the DOM is waaay simpler to scrape.
 */
casper.start('https://www.somesite.com', function() {
});

casper.then(function() {
    tryAndScroll(this);
});

casper.then(function() {;
    this.exit();
});

casper.run();

1 个答案:

答案 0 :(得分:2)

这是一个简单的方法:

function tryAndScroll(casper) {
    casper.page.scrollPosition = {
        top: casper.page.scrollPosition["top"] + 300,
        left: 0
    };
}

casper.start(url).then(function() {
    var self = this;
    var intervalId = setInterval(function(){
        tryAndScroll(self);
    }, 100); // retry interval
    self.wait(10000 /* infinite scroll timeout */, function(){
        clearInterval(intervalId);
    });
}).run();

由于setInterval()不是CasperJS步骤函数,因此这基本上脱离了CasperJS的控制流程。 wait()是必要的,以便CasperJS在滚动期间不会执行其他操作。

此外,您无法使用40000像素的滚动距离。这太大了,PhantomJS无法拍摄截图。