Skrobię stronę na Facebooku za pomocą modułu węzła PhantomJS (https://github.com/sgentle/phantomjs-node), ale kiedy próbuję ocenić stronę, nie oceni ona funkcji, którą do niej podchodzę. Wykonywanie go w autonomicznym skrypcie i uruchamianie go za pomocą interpretera węzłów działa. Ten sam kod w aplikacji Express.js nie działa.Phantomjs nie wykonuje funkcji w funkcji page.evaluate
To jest mój kod
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);
});
});
});
};
Wyjście uzyskać:
{"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"}
Więc, jak widać, to wywołuje funkcję Phantom oddzwonienia (drugi parametr w funkcji oceny) o wartości null argument, ale nie wykonuje pierwszego parametru (funkcja ewaluatora, która drukuje iterujący krok X).
Ktoś wie, na czym polega problem?
Najnowsza wersja mostu phantomjs węzłów powinny powrócić obietnicą zamiast polegania na funkcji zwrotnej. –
To naprawdę mi pomogło, dziękuję –
Cóż, tracę około 6 godzin próbując pewnych rzeczy wewnątrz funkcji 'assess' ... Jeśli jest w niej jakaś inna funkcja lub jakikolwiek inny typ, to nawet nie rozpocznie wykonywania funkcji ... Jedna ważna rzecz. ** Nie zapomnij przeczytać dokumentacji ** –