微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – Phantomjs不执行page.evaluate函数的功能

我正在使用PhantomJS节点模块( https://github.com/sgentle/phantomjs-node)抓住Facebook页面,但是当我尝试评估页面时,它不会评估我传递给它的功能.在独立脚本中执行它并使用Node解释器运行它.Express.js应用程序中的相同代码不起作用.

这是我的代码

facebookScraper.prototype.scrapeFeed = function (url,cb) {
    f = ':scrapeFeed:';

    var evaluator = function (s) {
        var posts = [];

        for (var i = 0; i < Feed_ITEMS; i++) {
            log.info(__filename+f+' iterating step ' + i);
            log.info(__filename+f+util.inspect(document,false,null));
        }

        return {
            news: posts
        };
    }

    phantom.create(function (ph) {
        ph.createPage(function (page) {
            log.fine(__filename+f+' opening url ' + url);
            page.open(url,function (status) {
                log.fine(__filename+f+' opened site? ' + status);
                setTimeout(function() {
                    page.evaluate(evaluator,function (result) {
                        log.info(__filename+f+'Scraped Feed: ' + util.inspect(result,null));
                        cb(result,ph);
                    });
                },5000);
            });
        });
    });
};

输出我得到:

{"level":"fine","message":"PATH/fb_regular.js:scrapeFeed: opening url <URL> ","timestamp":"2012-09-23T18:35:10.151Z"}
{"level":"fine","message":"PATH/fb_regular.js:scrapeFeed: opened site? success","timestamp":"2012-09-23T18:35:12.682Z"}
{"level":"info","message":"PATH/fb_regular.js:scrapeFeed: Scraped Feed: null","timestamp":"2012-09-23T18:35:12.687Z"}

所以,如你所见,它用空参数调用幻影回调函数(评估函数中的第二个参数),但是它不执行第一个参数(我的评估器函数,它打印迭代步骤X).

任何人都知道问题是什么?

解决方法

我不确定您正在使用什么版本的PhantomJS,但是对于评估脚本中1.6版本的文档,将记录所包含的页面中的结果.它不会登录到您的控制台.为了得到你必须绑定日志记录到onConsoleMessage事件的页面
page.onConsoleMessage = function (msg) { console.log(msg); };

因为结果不可用:page.evaluate函数接受这样的参数 – 第一个是要执行的函数,其余的作为输入传递给该函数.结果直接返回:

var title = page.evaluate(function (s) {
    return document.querySelector(s).innerText;
 },'title');
 console.log(title);

原文地址:https://www.jb51.cc/js/152407.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐