2012-10-19 14 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

JSON.stringify(result)を用いPhantomJSからそうだけ出力JSON文字列と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メソッドの後またはexitメソッドのパラメータとして(ちょうど両方を試してみて、私のために働いていないようです) – silkAdmin

+0

文字列を渡したい場合は、実際にはJSONを使う必要はありません。 JSONを使うことをお勧めします。 PhantomJSを使用してデータをスクラップする場合、多くのものを共有したいと思うかもしれません。 – 3on

+0

okもう一度、本当にうまくいきました。私を混乱させたのは、ブラウザ側では、console.logは、有益なデータを実際に返す方法をダンプする方法だと思っていました。 – silkAdmin

0

もっと簡単な方法(オプションがある場合)はphantomjsではなくNPNモジュールphantomを使用することです。これにより、別々のスクリプトを管理するのではなく、nodejのブラウザに直接アクセスすることができます。

関連する問題