CasperJS附带了位于cli模块中的PhantomJS解析器之上的内置命令行解析器。它将传递的参数公开为位置和命名选项。
Casper实例总是包含一个可以使用的cli属性来方便访问这些参数,因此您不用担心操作cli模块解析API。
我们来看看这个简单的casper脚本:
var casper = require("casper").create();
casper.echo("Casper CLI passed args:");
require("utils").dump(casper.cli.args);
casper.echo("Casper CLI passed options:");
require("utils").dump(casper.cli.options);
casper.exit();
请注意这两个casper-path和cli选项,这些选项通过casperjs Python可执行文件传递给casper脚本。
运行结果:
$ casperjs test.js arg1 arg2 arg3 --foo=bar --plop anotherarg
Casper CLI passed args: [
"arg1",
"arg2",
"arg3",
"anotherarg"
]
Casper CLI passed options: {
"casper-path": "/Users/niko/Sites/casperjs",
"cli": true,
"foo": "bar",
"plop": true
}
获取,查询或删除参数:
var casper = require("casper").create();
casper.echo(casper.cli.has(0));
casper.echo(casper.cli.get(0));
casper.echo(casper.cli.has(3));
casper.echo(casper.cli.get(3));
casper.echo(casper.cli.has("foo"));
casper.echo(casper.cli.get("foo"));
casper.cli.drop("foo");
casper.echo(casper.cli.has("foo"));
casper.echo(casper.cli.get("foo"));
casper.exit();
运行结果:
$ casperjs test.js arg1 arg2 arg3 --foo=bar --plop anotherarg
true
arg1
true
anotherarg
true
bar
false
undefined
您可能需要在Windows中包裹含有转义双引号的空格的选项。如: -foo = \“space bar \”
。
如果你想检查是否有任何参数或选项传递到你的脚本怎么办? 你可以这样:
// removing default options passed by the Python executable
casper.cli.drop("cli");
casper.cli.drop("casper-path");
if (casper.cli.args.length === 0 && Object.keys(casper.cli.options).length === 0) {
casper.echo("No arg nor option passed").exit();
}
版本1.1新增 casperjs命令行有3个可用参数:
--direct
:将log信息输出在控制台中。--log-level=[debug|info|warning|error]
设置log类别--engine=[phantomjs|slimerjs]
选择你想使用的浏览器内核。CasperJS支持 PhantomJS(默认)使用的Webkit内核, 和 SlimerJS 使用的Gecko内核。
警告 在版本1.1及以后版本弃用
--direct
选项已经重命名为--verbose
,尽管--direct
仍然可以使用,但我们建议你放弃使用它从而使用重命名之后的选项。
示例:
$ casperjs --verbose --log-level=debug myscript.js
最后提醒,你仍然可以像运行PhantomJS的脚本一样使用PhantomJS的标准CLI选项来运行脚本。
$ casperjs --web-security=no --cookies-file=/tmp/mycookies.txt myscript.js
如果你想知道本地PhantomJS cli拥有哪些可用的选项,你可以运行phantomjs的--help
命令, SlimerJS和PhantomJS的命令基本上相同。
版本1.0新增 在默认情况下,cli对象将处理每个传递的参数并将它们转换到适当的检测类型,看一个例子:
var casper = require('casper').create();
var utils = require('utils');
utils.dump(casper.cli.get('foo'));
casper.exit();
如你所见,01234567的值被转换成了Nember。
如果你使用参数的原始值,可以在cli对象中使用raw属性,它保存了传入参数的原始值:
var casper = require('casper').create();
var utils = require('utils');
utils.dump(casper.cli.get('foo'));
utils.dump(casper.cli.raw.get('foo'));
casper.exit();
例子的用法:
var casper = require('casper').create();
var utils = require('utils');
utils.dump(casper.cli.get('foo'));
utils.dump(casper.cli.raw.get('foo'));
casper.exit();
由于ECMA脚本对数字的限制,对于非常长的数字(超过17位),CasperJS会使用参数的原始值。更多信息