在脚本中读取phantomjs命令行选项

时间:2016-02-17 10:29:51

标签: javascript console phantomjs

我从命令行启动PhantomJS with option(其余部分被删除):

phantomjs --debug=false script.js

W想在script.js中读取--debug标志状态:

var page = require('webpage').create();
var debug = // init boolean value depends of flag --debug from console

page.onConsoleMessage = function(msg) {
    if(debug) {
        console.log('Console:' + msg);
    }
};

// ...

不幸system.args不包含命令行选项。

1 个答案:

答案 0 :(得分:0)

我一直在寻找谷歌并没有找到任何有用的提示。 我知道phantomjs不能使用npm模块 这是绝望的。 phantomjs系统模块不是节点系统模块,所以npm包几乎不能与phantomjs兼容。非常沮丧,我只能编写自己的命令行解析参数

创建一个文件commandLineArgs.js

module.exports = function (args, optionDefinitions) {
// via : https://stackoverflow.com/questions/35454087/read-phantomjs-command-line-options-inside-script
    var result = {
        args: [],
        options: {}
    };
    for (var j in optionDefinitions) {
        var def = optionDefinitions[j];
        if (def['multiple'] === true) {
            result.options[def['name']] = [];
        }
    }

    checkPoint_i:for (var i = 1; i < args.length; i++) {
        var arg = args[i];

        if (args[i].slice(0, 1) === "-") {

            var k = args[i].replace(/^-{1,2}/, '');

            for (var j in optionDefinitions) {
                var def = optionDefinitions[j];
                if (def['name'] === k || def['alias'] === k) {
                    i++;
                    if (def['multiple'] === true) {
                        result.options[def['name']].push(args[i]);
                    } else {
                        result.options[k] = args[i];
                    }
                    continue checkPoint_i;
                }
                // no def so change to args
            }

        }
        result.args.push(arg);
    }
    return result;
};

然后在您的代码中标记它,像这样使用

var commandLineArgs = require('./node_modules/command-line-args');
var optionDefinitions = [
    {name: 'header', alias: 'H', type: String, multiple: true},
    {name: 'debug'},
];
var command = commandLineArgs(system.args, optionDefinitions);

console.log(command.options['header']); 
console.log(command.args); 

运行:phantomjs yourSctipt.js --header "Host: google.com" --debug true http://www.google.com/

// output [Host: google.com]
// output [http://www.google.com/]

希望这可以帮到你