Возможно ли запустить PhantomJS из node.js в качестве аргумента командной строки
Недавно я собирался протестировать phantomJS из python в качестве аргумента командной строки, я еще не обходил его, но видел примеры. Поскольку PhantomJS запускается из командной строки, это кажется возможным. Результат, который PhantomJS выплюнул, попадет прямо в переменную.
Прежде чем я поделюсь по этому пути, сделав эту работу в node.js, на самом деле будет более полезной для меня, и это заставило меня задуматься, могу ли я просто использовать node для запуска PhantomJS, поскольку программа запускается из командной строки и сохранить результат данных, который PhantomJS обычно выплевывает в переменную?
Я бы предпочел не использовать phantomjs-node, потому что, похоже, он использует слишком много трюков.
Причиной всего этого является возможность запуска PhantomJS в то же время, что и другое действие, которое выполняет программа, и использование полученных данных, записанных для некоторых других вещей.
Проще говоря, вы можете запускать системную командную строку в python, могу ли я сделать то же самое в node.js?
Приветствия:)
Изменить: я понимаю, что node и phantom используют разные среды js, это классно, потому что я просто хочу запустить phantom как свой собственный процесс и поймать все эти выходные данные в переменной node.js( данные будут массивом пары, строки и с плавающей запятой.) Я не хочу "водить" с помощью phantom, я создам загруженные файлы javascript, чтобы сделать то, что хочу. Все, что я хочу, это phantom вывод.:)
Ответы
Ответ 1
Я полагаю, вы можете сделать простой script для Node.js для запуска; в том, что script phantomjs
script будет выполняться как дочерний процесс. Вы можете увидеть рабочий пример (и ссылки для некоторой документации) в этом ответе. Я полагаю, это обсуждение может быть полезно и вам.
Ответ 2
Из NPM: https://npmjs.org/package/phantomjs
var path = require('path')
var childProcess = require('child_process')
var phantomjs = require('phantomjs')
var binPath = phantomjs.path
var childArgs = [
path.join(__dirname, 'phantomjs-script.js'),
'some other argument (passed to phantomjs script)'
]
childProcess.execFile(binPath, childArgs, function(err, stdout, stderr) {
// handle results
})
Ответ 3
В качестве альтернативы ответа Дональда Дерека вы можете использовать функцию spawn
. Это позволит вам читать выходные данные дочернего процесса, как только он будет создан, а не выводить буферизацию и сразу возвращаться к вам.
Подробнее об этом можно узнать здесь.
Пример из документации.
var spawn = require('child_process').spawn,
ls = spawn('ls', ['-lh', '/usr']);
ls.stdout.on('data', function (data) {
console.log('stdout: ' + data);
});
ls.stderr.on('data', function (data) {
console.log('stderr: ' + data);
});
ls.on('close', function (code) {
console.log('child process exited with code ' + code);
});