使用nodeJS和phantomJS返回网络请求和响应,仅在控制台中工作

时间:2014-10-10 16:00:10

标签: javascript node.js phantomjs

我正在尝试复制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
}
});

1 个答案:

答案 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
    }
});