2012-10-19 4 views
10

node.js 스크립트에서 exec() 호출을 통해 실행되는 phantomJS 스크립트가 있습니다. 이제 노드에서 다시 활용할 수 있도록 PhantomJS 스크립트에서 문자열을 반환해야합니다.
이를 달성 할 방법이 있습니까?PhantomJS에서 node.js로 값 전달

노드 응용 프로그램 :

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

dumper.js (팬텀)

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

답변

10

그래 PhantomJS에서 불과 출력 JSON 문자열 JSON.stringify(result)을 사용하고 JSON.parse(stdout)와 Node.js를 그것을 구문 분석 . 예를 들어이 같이

:

Node.js를 :

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

PhantomJS : 긁어 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.

+0

감사합니다. JSON.stringify ('result') 호출을 어디에 두어야하나요? return statment 나 exit 메쏘드의 매개 변수로서 (그냥 시도해 보았고 나를 위해 일하지 않는 것 같습니다) – silkAdmin

+0

단지 문자열을 전달하기를 원한다면 실제로 JSON을 사용할 필요가 없습니다. 더 많은 작업을 원할 수 있으므로 JSON을 사용하는 것이 좋습니다. PhantomJS를 사용하여 데이터를 스크랩하면 많은 것을 공유하고 싶을 수 있습니다. – 3on

+0

ok 다시 한 번 고마워. 실제로 저에게 혼란스러워하는 부분은 브라우저 쪽에서 양식을 작성하는 것입니다. console.log는 유익한 데이터를 덤프하는 방법 일 뿐이므로 실제 물건을 반환하는 방법이라고 생각합니다. – silkAdmin

0

훨씬 간단한 방법 (옵션이있는 경우)은 phantomjs 대신 NPM 모듈 phantom을 사용하는 것입니다. 이렇게하면 별도의 스크립트를 유지 관리하는 대신 nodejs에서 브라우저에 직접 액세스 할 수 있습니다.