我正在用PhantomJS節點模塊(https://github.com/sgentle/phantomjs-node)刮取Facebook頁面,但是當我嘗試評估頁面時,它不評估我傳遞給它的函數。在獨立腳本中執行它並使用Node解釋器運行它。Express.js應用程序中的相同代碼不起作用。Phantomjs在page.evaluate函數中不執行函數
這是我的代碼
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"}
所以,你看,它調用幻影回調函數用空(在評價函數的第二個參數)參數,但它不執行第一個參數(我的計算器函數,它打印迭代步驟X)。
任何人都知道問題是什麼?
的phantomjs節點橋的最新版本應該返回一個承諾,而不是依靠回調函數。 –
這真的對我有幫助,謝謝 –
嗯,我在'evaluate'函數內部嘗試了一些東西,失去了大約6個小時......如果裏面還有另一個函數,或者任何非原始類型,它甚至不會啓動函數執行...一件重要的事情。 **不要忘記閱讀文件** –