我正在使用 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, false, 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"}
因此,如您所见,它使用 null 参数调用幻像回调函数(评估函数中的第二个参数),但它不执行第一个参数(我的评估器函数,它打印迭代步骤 X)。
任何人都知道问题是什么?