【问题标题】:CasperJS evaluate not excecuting after scrolling downCasperJS 在向下滚动后评估不执行
【发布时间】:2016-10-10 03:04:15
【问题描述】:

我已经能够滚动到网页的末尾以加载所有动态内容。但是在这样做之后,我想评估页面以获得一些数据。我的问题是如果我运行的东西不是简单的

casper.echo("something");

我的代码中断了,我没有得到契约数据。这是我的代码:

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”,或者我永远无法在评估或其他任何内容中执行代码。

滚动效果很好,没有滚动我可以设法评估页面并获得想要的内容。

那么我怎样才能做到这一点呢?滚动完成后评估页面?

谢谢

编辑: 我还测试了将回调函数传递给 scrollNow() 以在调用 scrollNow() 后继续执行。回调被调用,但同样没有运气评估 findAll 或任何其他函数来获取所需数据。

【问题讨论】:

    标签: javascript phantomjs casperjs evaluate


    【解决方案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");
    });
    

    其他一切看起来都很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多