向下滚动页面事件 x 秒

Scroll down page event for x seconds

我目前可以在 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();

这是一个简单的方法:

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的step函数,这基本上脱离了CasperJS的控制流程。 wait() 是必需的,这样 CasperJS 就不会在滚动期间执行其他操作。

此外,您不能使用 40000 像素的滚动距离。这太大了,PhantomJS 将无法截屏。