I'm getting started with Grunt and wanting to pass a variable to a PhantomJS script I'm running via exec. What I want to be able to do is pass a url in for the script to take the screen capture from. Any help would be greatly appreciated, thanks!
Darren
Grunt script
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();
});
Command-line arguments are accessible via module require('system').args
(Module System
). The first one is always the script name, which is then followed by the subsequent arguments
This script will enumerate all arguments and write out to console.
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 your case, the solution is
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();
});
Here is an easy way to pass and pick args that are applicable. Very flexible and easy to maintain.
Use like:
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
Script:
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();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With