通过CasperJS命令行传递数字变量会导致某些字符而不是数字

时间:2016-06-12 11:50:58

标签: javascript casperjs

我有一个基本的CasperJS脚本,它将预定义的搜索词插入到亚马逊搜索框中,当我执行脚本并查看捕获的图像时,我可以看到方框中的文字。

然后我决定让它变得动态,而不是预先定义搜索词,而是通过命令行传递它。

casperjs amazon.js --barcode=4380758484375

然而,当我这样做时,当我查看捕获的图像时,我在亚马逊网站的搜索字段中没有得到任何文本。我知道价值正在传递,因为我已经回应了它。

我本周末非常有限且开始学习的经历,我想知道是否需要定义var。出于测试目的,条形码设置为通过命令行传递的值,并且barcode1是预定义的。

var casper = require('casper').create();

var x = require('casper').selectXPath;

casper.userAgent('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)');


casper.echo("Casper CLI passed args:");
require("utils").dump(casper.cli.args);

casper.echo("Casper CLI passed options:");
require("utils").dump(casper.cli.options);


var barcode = casper.cli.get("barcode");
var barcode1 = "5030945112877"; //casper.cli.get("barcode");


casper.echo("*"+barcode1+"*");


casper.start('https://www.amazon.co.uk/');

casper.then(function () {
    this.sendKeys('#twotabsearchtextbox', barcode);
    console.log('Entering Search Term '+barcode+' Into Amazon Search Field');
    casper.capture('amazon.png');
});

casper.run();

如果我设置--barcode=fifa则有效。如果我将其设置为--barcode=fifa123它也可以,但是如果我将其设置为--barcode=123,则在捕获图像中我会看到对应于123的扩展字符。

2 个答案:

答案 0 :(得分:1)

请参阅Raw parameter values

  

默认情况下,cli对象将处理每个传递的参数&将它们转换为适当的检测类型[...]

CasperJS会自动将CLI选项解析为适当的类型。如果输入数字,它将被转换为数字。这不是问题,但由于此数字被传递到casper.sendKeys(),因此不会将其视为字符串。 casper.sendKeys()是PhantomJS'page.sendEvent()的包装器,它将整数视为char codes

您需要使用原始值或自己转换为字符串:

var barcode = casper.cli.raw.get("barcode");
// or
var barcode = "" + casper.cli.get("barcode");

答案 1 :(得分:0)

经过一些跟踪和错误后,似乎只通过命令行传递一个数字就是存在问题的地方。

使用

casper.cli.raw.get("barcode");

而不是

casper.cli.get("barcode");

解决了这个问题,这是由于我可以看到CasperJS版本的机会。还找到了对以下网站https://github.com/casperjs/casperjs/issues/248

的引用