Подтвердить что ты не робот

Передача значения из PhantomJS в node.js

У меня есть phantomJS script, который выполняется через вызов exec() в node.js script. Теперь мне нужно вернуть строку из PhantomJS script, чтобы ее можно было использовать в node.
Есть ли способ достичь этого?

Node приложение:

child = exec('./phantomjs dumper.js',
    function (error, stdout, stderr) {
        console.log(stdout, stderr);      // Always empty
    });

dumper.js(Phantom)

var system = require('system');
var page = require('webpage').create();
page.open( system.args[1], function (status) {
    if (status !== 'success') {
        console.log('Unable to access the network!');
    } else {

        return "String"; // Doesn't work
    }
    phantom.exit('String2'); //Doesn't work either
});
4b9b3361

Ответ 1

Да, просто введите строку JSON из PhantomJS с помощью JSON.stringify(result) и проанализируйте ее в node.js с помощью JSON.parse(stdout).

Как это, например:

Node.js

child = exec('./phantomjs dumper.js',
    function (error, stdout, stderr) {
        console.log(stdout, stderr);      // Always empty
        var result = JSON.parse(stdout);
    }
);

PhantomJS:

var system = require('system');
var page = require('webpage').create();
page.open( system.args[1], function (status) {
    if (status !== 'success') {
        console.log('Unable to access the network!');
    } else {

        console.log(JSON.stringify({string:"This is a string", more: []}));
    }
    phantom.exit();
});

Вот несколько шаблонов о том, как использовать PhantomJS для очистки.

Ответ 2

Гораздо проще (если у вас есть опция) использовать модуль NPM phantom вместо phantomjs. Это позволяет вам обращаться к браузеру непосредственно в nodejs, а не поддерживать отдельные сценарии.