如何使用 phantomjs 连续点击 "Load More" 按钮直到页面完全填充?
How to use phantomjs to click "Load More" button continually until page is fully populated?
我是学习 phantomjs 和 casperjs 的新手,正在寻找一些关于如何单击 "Load More" 按钮以完全填充页面的指示。我查看了类似的问题,但没有看到任何匹配的内容(至少我不理解)。这个想法是从 livestream.com 活动页面中抓取观看者计数。
首先,我可以用phantomjs抓取纯文本的第一页(以cnet为例)如下:
var page = require('webpage').create();
page.open('http://livestream.com/cnet', function() {
console.log(page.plainText);
phantom.exit();
});
还有很多其他活动列表需要单击 "Load More"。我想使用以下伪代码扩展上面的代码来执行此操作:
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);
我以前做过这样的实现,效果很好。
我是学习 phantomjs 和 casperjs 的新手,正在寻找一些关于如何单击 "Load More" 按钮以完全填充页面的指示。我查看了类似的问题,但没有看到任何匹配的内容(至少我不理解)。这个想法是从 livestream.com 活动页面中抓取观看者计数。
首先,我可以用phantomjs抓取纯文本的第一页(以cnet为例)如下:
var page = require('webpage').create();
page.open('http://livestream.com/cnet', function() {
console.log(page.plainText);
phantom.exit();
});
还有很多其他活动列表需要单击 "Load More"。我想使用以下伪代码扩展上面的代码来执行此操作:
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);
我以前做过这样的实现,效果很好。