Passing a variable to PhantomJS via exec

后端 未结 2 2068
刺人心
刺人心 2021-01-05 04:35

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 t

相关标签:
2条回答
  • 2021-01-05 04:39

    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();
    });
    
    0 讨论(0)
  • 2021-01-05 04:45

    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();
    
    0 讨论(0)
提交回复
热议问题