Ich kratze eine Facebook-Seite mit dem PhantomJS Knoten-Modul (https://github.com/sgentle/phantomjs-node), aber wenn ich versuche, die Seite auszuwerten, wird nicht ausgewertet, die Funktion, die ich an sie übergeben. Es wird in einem eigenständigen Skript ausgeführt und mit dem Node-Interpreter ausgeführt. Derselbe Code in einer Express.js-App funktioniert nicht.Phantomjs führt keine Funktion in page.evaluate Funktion
Das ist mein Code
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);
});
});
});
};
Der Ausgang ich erhalte, ist: wie Sie also
{"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"}
finden, ruft es die Phantomcallback-Funktion (zweiter Parameter in der Funktion auswerten) mit einem Null Argument, aber es führt nicht den ersten Parameter (meine Evaluator-Funktion, die Iteration Schritt X druckt).
Wer weiß, was das Problem ist?
Die neueste Version der PhantomJS-Knoten Brücke soll ein Versprechen zurückkehren statt sich auf eine Callback-Funktion verlassen. –
Das hat mir wirklich geholfen, danke –
Nun, ich verliere etwa 6 Stunden einige Dinge im 'evaluate' -Funktion zu testen ... Wenn es eine andere Funktion gibt, oder irgendetwas nicht-primitiver Typ, wird es nicht einmal die Ausführung der Funktion starten ... Eine wichtige Sache. ** Vergessen Sie nicht, die Dokumentation zu lesen ** –