Estoy arrastrando una página de Facebook con el módulo de nodo PhantomJS (https://github.com/sgentle/phantomjs-node), pero cuando intento evaluar la página, no evalúa la función que le paso. Ejecutarlo en una secuencia de comandos independiente y ejecutarlo con el intérprete de nodo funciona ... El mismo código en una aplicación Express.js no funciona.Phantomjs no ejecuta la función en la función page.valuate
Este es mi código
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);
});
});
});
};
La salida me sale:
{"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"}
Así que, como ves, se llama a la función fantasma de devolución de llamada (segundo parámetro en la función de evaluar) con un nulo argumento, pero no ejecuta el primer parámetro (mi función evaluadora, que imprime el paso iterativo X).
¿Alguien sabe cuál es el problema?
La versión más reciente del puente PhantomJS-nodo debe devolver una promesa en vez de confiar en una función de devolución de llamada. –
Esto realmente me ayudó, gracias –
Bueno, pierdo unas 6 horas probando algunas cosas dentro de la función 'evaluar' ... Si hay otra función dentro de ella, o algo de tipo no primitivo, ni siquiera comenzará la ejecución de la función ... Una cosa importante. ** No olvides leer la documentación ** –