【问题标题】:How to use phantomjs to click "Load More" button continually until page is fully populated?如何使用 phantomjs 不断单击“加载更多”按钮,直到页面完全填充?
【发布时间】:2018-03-28 14:09:06
【问题描述】:

我对学习 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
}

检查上述网址上的按钮元素,我发现以下内容:

<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 中这样做会更有意义吗?

请原谅我极端的菜鸟水平,我正在尽我所能解决这个问题,但我需要一些指导。

谢谢!

【问题讨论】:

    标签: javascript angularjs phantomjs casperjs


    【解决方案1】:

    您可以编写自己的实现,如下面的骨架

    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);
    

    我之前做过这样的实现,效果很好。

    【讨论】:

      猜你喜欢
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多