我目前可以在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();
答案 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无法拍摄截图。