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"}
だから、あなたが見るように、それはヌルでファントムコールバック関数(評価関数の2番目のパラメータ)を呼び出します最初のパラメータは実行されません(私の評価関数は、反復ステップXを出力します)。
誰でも問題の原因を知ることができます。
phantomjsノードブリッジの最新バージョンではなく、約束を返す必要がありますコールバック関数に頼っています。 –
これは本当に助けてくれました。ありがとうございます –
'evaluate'関数の中でいくつかのことを試してみると約6時間かかります...その中に別の関数がある場合や、何か非プリミティブ型の場合は関数の実行を開始しません...一つの重要なこと。 **ドキュメントを読むことを忘れないでください** –