如何使用 phantomjs 连续单击"Load More"按钮直到页面完全填充?



我对学习phantomjs和casperjs非常陌生,并在如何单击"加载更多"按钮以完全填充页面方面寻找一些指针。我看过类似的问题,但没有发现任何匹配的问题(至少我不理解)。这个想法是从livestream.com的活动页面上抓取观众计数。

首先,我可以用phantomjs(以cnet为例)获取第一个纯文本页面,如下所示:

var page = require('webpage').create();
page.open('http://livestream.com/cnet', function() {
console.log(page.plainText);
phantom.exit();
});

不过,还有相当多的额外事件列表需要点击"加载更多"。我想使用以下伪代码来扩展上面的代码:

while ("Load More" exists) {
click button
delay to allow page to load
}

检查上面url上的按钮元素,我发现了以下内容:

<a href="javascript:void(0);" class="button thin_border_button black_border small_button ng-binding" ng-click="loadMoreEventsPublic('Archived')" ng-bind="loadMoreText">Load More</a>

如何重复单击(即ng-click="loadMoreEventsPublic('Archived')"),直到页面完全加载,然后退出phantomjs?

在casperjs中这样做更有意义吗?

请原谅我的极端水平,我正在尽我所能弄清楚这一点,但我需要一些指导。

谢谢!

您可以像下面的框架一样编写自己的实现

function onLoadMoreLinkExists(){
casper.click("load more link selector");
casper.then(function(){
casper.waitFor("load more link selector", onLoadMoreLinkExists, afterAllLoad);
});
}
function afterAllLoad(){
// what to do once after all lazy load content loaded
}
casper.waitFor("load more link selector", onLoadMoreLinkExists
}, afterAllLoad);

我不久前就做过这样的实现&效果很好。

最新更新