Casperjs очищает динамический контент

Я пытаюсь очистить эту страницу с помощью Casperjs. . Основная функция моего кода работает нормально, но содержимое загружается динамически, и я не могу понять, как это вызвать.

Вот что я делаю прямо сейчас:

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

Но я не мог понять это, и я даже не уверен, что это уместно здесь. Любые идеи?


person Yasmina Lembachar    schedule 08.03.2015    source источник


Ответы (1)


Я посмотрел на страницу. У него такое поведение, что он не загружает средние изображения, когда вы переходите к концу.

При загрузке страницы первая пара строк загружается полностью, а еще несколько не полностью загружаются (отсутствует изображение, обозначенное элементом '.loading-msg'). Когда вы переходите в конец с помощью this.scrollToBottom();, непрерывной прокрутки нет. Он перескакивает в конец, и JavaScript страницы не обнаруживает, что средние изображения были в области просмотра, хотя и ненадолго. Страница продолжает загружать следующие строки, но не отсутствующие изображения пропущенных строк.

Вы должны уменьшить расстояние прыжка в обоих ваших фрагментах.

Первый можно изменить следующим образом:

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

to

var height = casper.page.viewportSize.height;
this.page.scrollPosition = { top: this.page.scrollPosition.top + height, left: 0 };
person Artjom B.    schedule 08.03.2015