Tôi đang cạo một trang Facebook với mô-đun nút PhantomJS (https://github.com/sgentle/phantomjs-node), nhưng khi tôi thử đánh giá trang, nó không đánh giá hàm tôi chuyển cho nó. Thực thi nó trong một kịch bản độc lập và chạy nó với trình thông dịch Node hoạt động .. Mã tương tự trong ứng dụng Express.js không hoạt động.Phantomjs không thực thi chức năng trong page.evaluate chức năng
Đây là mã của tôi
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);
});
});
});
};
Kết quả tôi nhận được:
{"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"}
Vì vậy, như bạn thấy, nó gọi hàm phantom callback (tham số thứ hai trong đánh giá chức năng) với một null đối số, nhưng nó không thực hiện tham số đầu tiên (hàm đánh giá của tôi, mà in bước lặp X).
Bất kỳ ai cũng biết vấn đề là gì?
Phiên bản mới nhất của các cầu phantomjs-nút cần trả về một Promise thay dựa vào chức năng gọi lại. –
Điều này thực sự giúp tôi, cảm ơn bạn –
Vâng, tôi mất khoảng 6 giờ thử một số thứ bên trong hàm 'evaluation' ... Nếu có một hàm bên trong nó, hoặc bất kỳ kiểu nguyên thủy nào, nó thậm chí sẽ không bắt đầu thực thi hàm ... Một điều quan trọng. ** Đừng quên đọc tài liệu ** –