Использование 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
    }
});
Другие вопросы по тегам