10

exec()node.jsスクリプトの呼び出しを介して実行されるphantomJSスクリプトがあります。次に、PhantomJSスクリプトから文字列を返して、ノードで使用できるようにする必要があります。
それを達成する方法はありますか?

ノードアプリ:

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

2 に答える 2

11

ええ、PhantomJSからJSON文字列を出力し、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を使用してスクレイプする方法の定型文を次に示します。

于 2012-10-19T17:52:07.140 に答える
0

(オプションがある場合)はるかに簡単な方法は、 phantomjsの代わりにNPMモジュールphantomを使用することです。これにより、個別のスクリプトを維持する代わりに、nodejsで直接ブラウザーにアクセスできます。

于 2015-12-11T03:32:10.260 に答える