8

Ich beginne mit Grunt und möchte eine Variable an ein PhantomJS-Skript übergeben, das ich über exec ausführe. Ich möchte eine URL eingeben, damit das Skript die Bildschirmaufnahme übernimmt. Jede Hilfe würde sehr geschätzt werden, danke!Eine Variable an PhantomJS über exec übergeben

Darren

Grunt Skript

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

Antwort

17

Befehlszeilenargumente sind über Modul require('system').args (Modul System). Der erste Name ist immer der Skriptname, gefolgt von den nachfolgenden Argumenten

Dieses Skript wird alle Argumente aufzählen und auf die Konsole schreiben.

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

In Ihrem Fall ist die Lösung

Grunt

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

Hier ist eine einfache Möglichkeit, args passieren und Pick das sind anwendbar. Sehr flexibel und einfach zu warten.


verwenden wie:

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 

Drehbuch:

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(); 
Verwandte Themen