Использование nodeJS и phantomJS для возврата сетевых запросов и ответов, работает только в консоли
Я пытаюсь повторить функциональность phantomJS netlog.js, только в nodeJS. Я использую модуль phantomjs-node в качестве моста.
Обычно это выполняется без командной строки в командной строке с помощью phantomjs netlog.js http://www.google.com/
, Было бы возвращено много JSON, содержащий все сетевые запросы и ответы.
То, что я делаю здесь, пытается запустить код из netlog.js
внутри страницы, созданной с помощью phantomjs-node
модуль (игнорируя строку var page = require('webpage').create()
от netlog.js
,
Хотя код не нарушается, я не получаю возврат JSON. Что здесь не так? Нужно ли каким-то образом передавать запрос страницы?
В app.js
:
var phantom = require('phantom');
siteUrl = "http://www.google.com/"
phantom.create(function (ph) {
ph.createPage(function (page) {
var system = require('system'),
address;
page.open(siteUrl, function (status) {
// console.log("opened " + siteUrl +"\n",status+"\n");
page.evaluate(function () {
if (system.args.length === 1) {
console.log('Usage: netlog.js <some URL>');
phantom.exit(1);
} else {
console.log(system.args[1])
address = system.args[1];
page.onResourceRequested = function (req) {
console.log('requested: ' + JSON.stringify(req, undefined, 4));
};
page.onResourceReceived = function (res) {
console.log('received: ' + JSON.stringify(res, undefined, 4));
};
page.open(address, function (status) {
if (status !== 'success') {
console.log('FAIL to load the address');
}
phantom.exit();
});
}
}, function finished(result) {
ph.exit();
},thirdLayerLinks);
});
});
}, {
dnodeOpts: {
weak: false
}
});
1 ответ
Вы сделали ошибку во время копирования-вставки. Там не должно быть page.evaluate
звонок и только один page.open
вызов. Вы взяли слишком много из базового кода узла фантома.
PhantomJS и Node.js имеют разные среды выполнения и совершенно разные модули. Здесь нет phantom
ссылка. Дополнительно нет system
в узле. Вы, наверное, имеете в виду process
,
Тогда документы говорят следующее:
Обратные вызовы не могут быть установлены напрямую, вместо этого используйте
page.set('callbackName', callback)
Фиксированный код:
var phantom = require('phantom');
var address = "http://google.com/";
phantom.create(function (ph) {
ph.createPage(function (page) {
page.set("onResourceRequested", function (req) {
console.log('requested: ' + JSON.stringify(req, undefined, 4));
});
page.set("onResourceReceived", function (res) {
console.log('received: ' + JSON.stringify(res, undefined, 4));
});
page.open(address, function (status) {
if (status !== 'success') {
console.log('FAIL to load the address');
}
ph.exit();
});
});
}, {
dnodeOpts: {
weak: false
}
});