【问题标题】:Casperjs scraping dynamic contentCasperjs 抓取动态内容
【发布时间】:2015-05-09 16:47:17
【问题描述】:

我正在尝试使用 Casperjs 抓取此 page。我的代码的主要功能工作正常,但内容是动态加载的,我不知道如何触发它。

这就是我现在正在做的事情:

casper.waitFor(function() {

    this.scrollToBottom();

    var count = this.evaluate(function() {
        var match = document.querySelectorAll('.loading-msg');
        return match.length;
    });

    if (count <= 1) {
        return true;
    }
    else {
        return false
    };

}, function() { // do stuff });

等待超时刚刚到期,即使我已将其增加到 20 秒,并且永远不会加载新内容。我已经尝试将此功能调整为适合我的情况:

function tryAndScroll(casper) {
  casper.waitFor(function() {
    this.page.scrollPosition = { top: this.page.scrollPosition["top"] + 4000, left: 0 };
    return true;
  }, function() {
    var info = this.getElementInfo('p[loading-spinner="!loading"]');
    if (info["visible"] == true) {
      this.waitWhileVisible('p[loading-spinner="!loading"]', function () {
        this.emit('results.loaded');
      }, function () {
        this.echo('next results not loaded');
      }, 5000);
    }
  }, function() {
    this.echo("Scrolling failed. Sorry.").exit();
  }, 500);
}

但我无法弄清楚,我什至不确定它与这里是否相关。 有什么想法吗?

【问题讨论】:

    标签: javascript web-scraping casperjs dynamic-content


    【解决方案1】:

    我查看了该页面。它有这样一种行为,当你跳到最后时它不会加载中间图像。

    加载页面时,前几行已完全加载,而更多行未完全加载(图像丢失由'.loading-msg' 元素表示)。当您使用this.scrollToBottom(); 跳到末尾时,没有连续滚动。它跳到最后,页面 JavaScript 没有检测到中间图像在视口中,但是很短暂。页面继续加载下一行,但不会加载跳过的行的丢失图像。

    你必须减少你的两个 sn-ps 的跳跃距离。

    第一个可以改成这样:

    var pos = 0, 
        height = casper.page.viewportSize.height;
    casper.waitFor(function() {
        this.scrollTo(0, pos * height);
        return !this.exists('.loading-msg');
    }, function() { // do stuff }, 20000);
    

    第二个可能通过改变来工作

    this.page.scrollPosition = { top: this.page.scrollPosition["top"] + 4000, left: 0 };
    

    var height = casper.page.viewportSize.height;
    this.page.scrollPosition = { top: this.page.scrollPosition.top + height, left: 0 };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-17
      • 2019-01-13
      • 2016-09-04
      • 1970-01-01
      • 2013-12-15
      • 2020-10-24
      相关资源
      最近更新 更多