8

我开始使用 Grunt 并希望将变量传递给我通过 exec 运行的 PhantomJS 脚本。我想要做的是传递一个 url 以便脚本从中获取屏幕截图。任何帮助将不胜感激,谢谢!

达伦

咕噜脚本

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

截图.js

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

2 回答 2

18

命令行参数可通过模块require('system').args(Module 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
    }
);

截图.js

var page = require('webpage').create();
var address = system.args[1];
page.open(address , function () {
    page.render('google.png');
    phantom.exit();
});
于 2013-05-25T19:44:53.880 回答
7

这是传递和选择适用参数的简单方法。非常灵活且易于维护。


像这样使用:

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

或者

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

或者

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

或者

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();
于 2014-12-21T09:26:03.033 回答