我正在尝试复制phantomJS netlog.js功能,仅在nodeJS中。我正在使用phantomjs-node module作为桥梁。
通常,这将使用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
}
});
答案 0 :(得分:2)
你在复制粘贴期间犯了一个错误。不应该有page.evaluate
个来电,只有一个page.open
来电。你从基本的phantomjs-node代码中得到了一点点。
PhantomJS和Node.js具有不同的运行时和不同的模块。没有phantom
引用。此外,节点中没有system
。你的意思可能是process
。
然后docs说出以下内容:
无法直接设置回调,而是使用
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
}
});