2016-10-10 15 views
0

Мне удалось прокрутить страницу до конца моей веб-страницы, чтобы загрузить весь динамический контент. Но после этого я хотел бы оценить страницу, чтобы получить некоторые данные. Моя проблема в том, если я бегу что-нибудь другое, чем простойCasperJS оценивает не excecuting после прокрутки вниз

casper.echo("something"); 

Мой код перерывов, и я не получаю Deeded данные. Это мой код:

var casper = require('casper').create(); 
casper.start("http://mypageWithDynamicContentOnScroll.com"); 
var linksPrendas = []; 
casper.waitForSelector('#idOfDivContainingDynamicContent',function(){ 
    scrollNow(); 
}); 
var currentHeight; 
var page = 1; 
function scrollNow(){ 
    casper.scrollToBottom(); 
    casper.waitForSelector("#page"+page+"Height", function() { 
     casper.echo('scrolling...'); 
     page++; 
     scrollNow(); 
    }, 
    function _onTimeout(){ 

    }); 
} 

var data = ''; 
casper.then(function(){ 
    casper.echo('e'); 
    //data = __utils__.findOne('div#someId').textContent; 
    casper.echo('f'); 
    //var links = this.evaluate(function() { 
    // casper.echo("Evaluate "); 
    // var elements = __utils__.findAll('a'); 
    // return elements. map (function (e) { 
    //  return e.getAttribute('href'); 
    // }); 
    //}); 
}); 

casper.run(function(){ 

    // var data = casper.evaluate(function() { 
    //   var elements = __utils__.findAll('a.productListLink'); 
    //   return elements.map(function(e) { 
    //    return e.getAttribute('href'); 
    //   }); 
    //  casper.echo("Evaluate "); 
    //  return [1,2,3]; 
    // }); 
    casper.echo("Then"); 
    casper.echo(elements); 

    casper.echo("DONE").exit(); 

}); 

Вы можете увидеть некоторых из моего комментировала кода, который я попробовал много различных вариантов без какого-либо успеха. Я также попытался разместить оценку или findAll внутри обратного вызова _onTimeout. Я либо нарушаю код, и «DONE» никогда не печатается, либо я никогда не могу выполнить код внутри оценки или что-то еще.

Прокрутка отлично работает, и без прокрутки я могу оценить страницу и получить желаемый контент.

Так как я могу сделать эту работу? Оцените страницу после прокрутки?

Спасибо

EDIT: Я также испытанный передавая функцию обратного вызова scrollNow(), чтобы продолжить выполнение после scrollNow() называется. Вызывается обратный вызов, но опять же, нет удачи в оценке findAll или какой-либо другой функции для получения требуемых данных.

ответ

1

Объект casper является только доступны за пределами casper.evaluate и __utils__ является только доступны внутри casper.evaluate. Вызов casper.echo(...) приведет к типу TypeError и остановит выполнение.

Если вы хотите напечатать что-то из контекста страницы (внутри casper.evaluate), то вам необходимо зарегистрироваться на "remote.message" события:

casper.on("remote.message", function(msg){ 
    this.echo(msg); 
}); 

... 
casper.evaluate(function(){ 
    console.log("something from the page"); 
}); 

Все остальное выглядит нормально.

+0

красивый! Спасибо за информацию – Alejandro