Передача значения из 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
});
Ответы
Ответ 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, а не поддерживать отдельные сценарии.