2012-10-19 29 views
10

Mam skrypt phantomJS, który jest wykonywany za pośrednictwem wywołania exec() w skrypcie node.js. Teraz muszę zwrócić ciąg znaków ze skryptu PhantomJS, aby mógł on zostać ponownie użyty w węźle.
Czy istnieje sposób, aby to osiągnąć?Przekazywanie wartości z PhantomJS do node.js

aplikacja Węzeł:

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

Odpowiedz

10

Tak właśnie wyjście ciąg JSON z PhantomJS użyciu JSON.stringify(result) i przetwarza go w node.js z JSON.parse(stdout) .

jak to na przykład:

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(); 
}); 

Here is some boilerplate do sposobu korzystania PhantomJS zeskrobać.

+0

Dzięki, choć gdzie powinienem umieścić wywołanie JSON.stringify ('result')? po zwrocie lub jako parametrze metody wyjścia (próbowałem tylko i nie działa dla mnie) – silkAdmin

+0

Właściwie nie musisz używać JSON, jeśli chcesz tylko przekazać ciąg znaków. Zalecam użycie JSON, ponieważ możesz chcieć więcej. Jeśli używasz PhantomJS do usuwania danych, możesz chcieć udostępnić wiele rzeczy. – 3on

+0

OK dziękuję jeszcze raz, że rzeczywiście działa, co mnie myli, jest to, że wchodząc od strony przeglądarki, oczekiwałem, że console.log będzie tylko sposobem na zrzucenie informacji informacyjnych, a raczej sposób na zwrot rzeczy. – silkAdmin

0

Znacznie prostszym sposobem (jeśli masz opcję) jest użycie modułu NPM phantom zamiast phantomjs. To pozwala na dostęp do przeglądarki bezpośrednio w nodejs zamiast utrzymywania oddzielnych skryptów.

Powiązane problemy