8

私はGruntを使い始めており、execを介して実行しているPhantomJSスクリプトに変数を渡したいと思っています。私ができるようにしたいのは、スクリーンキャプチャを行うスクリプトのURLを渡すことです。どんな助けでも大変感謝します。ありがとう!execを使ってPhantomJSに変数を渡す

ダレン

兵卒スクリプト

exec('phantomjs screenshot.js', 
    function (error, stdout, stderr) { 
     // Handle output 
    } 
); 

screenshot.js

var page = require('webpage').create(); 
page.open('http://google.com', function() { 
    page.render('google.png'); 
    phantom.exit(); 
}); 

答えて

17

コマンドライン引数は、モジュールrequire('system').args(モジュールSystem)を介してアクセス可能です。最初のスクリプト名は常にスクリプト名で、その後に続く引数が続きます

このスクリプトはすべての引数を列挙し、コンソールに書き出します。あなたのケースでは

var args = require('system').args; 
if (args.length === 1) { 
    console.log('Try to pass some arguments when invoking this script!'); 
} 
else { 
    args.forEach(function(arg, i) { 
     console.log(i + ': ' + arg); 
    }); 
} 

、解決策はここ

兵卒

exec('phantomjs screenshot.js http://www.google.fr', 
    function (error, stdout, stderr) { 
     // Handle output 
    } 
); 

screenshot.js

var page = require('webpage').create(); 
var address = system.args[1]; 
page.open(address , function() { 
    page.render('google.png'); 
    phantom.exit(); 
}); 
7

で引数を渡すと、選択する簡単な方法です適用可能です。非常に柔軟でメンテナンスが簡単です。


のように使用します。

phantomjs tests/script.js --test-id=457 --log-dir=somedir/ 

OR

phantomjs tests/script.js --log-dir=somedir/ --test-id=457 

OR

phantomjs tests/script.js --test-id=457 --log-dir=somedir/ 

OR

phantomjs tests/script.js --test-id=457 

スクリプト:

var system = require('system'); 
// process args 
var args = system.args; 

// these args will be processed 
var argsApplicable = ['--test-id', '--log-dir']; 
// populated with the valid args provided in availableArgs but like argsValid.test_id 
var argsValid = {}; 

if (args.length === 1) { 
    console.log('Try to pass some arguments when invoking this script!'); 
} else { 
    args.forEach(function(arg, i) { 
    // skip first arg which is script name 
    if(i != 0) { 
     var bits = arg.split('='); 
     //console.log(i + ': ' + arg); 
     if(bits.length !=2) { 
     console.log('Arguement has wrong format: '+arg); 
     } 
     if(argsApplicable.indexOf(bits[0]) != -1) { 
     var argVar = bits[0].replace(/\-/g, '_'); 
     argVar = argVar.replace(/__/, ''); 
     argsValid[argVar] = bits[1]; 
     } 
    } 
    }); 
} 
// enable below to test args 
//require('utils').dump(argsValid); 
//phantom.exit(); 
関連する問題