CasperJS:如何传递参数并在循环中使用它们
CasperJS: how to pass arguments and use them in a loop
我正在编写脚本,我需要传递一些参数,我传递参数的方式是这样的:
xvfb-run casperjs --ignore-ssl-errors=true --ssl-protocol=any casper/server.js --checks='["215","216"]'
在server.js里面我把它赋给了一个变量:
var checks = casper.cli.get('checks');
然后在下面的代码中我循环使用代码:
casper.each(checks, function(check) {
$('*[data-queue="'+ check+'"] input:checkbox').prop('checked', false);
});
我的问题是,尽管我 console.log(checks) 来确认正在接收参数,但脚本一直在抱怨:
[error] [phantom] each() only works with arrays
不仅如此,如果我手动对数组进行硬编码,循环也不起作用。
casper.each 回调有两个参数,第一个是 Casper 模块本身,第二个是迭代变量。
casper.each(checks, function(self, check) {
// ...
});
如果你想操作 HTML 页面,那么它必须在页面上下文中完成,在 page.evaluate
:
内
casper.each(checks, function(self, check) {
self.evaluate(function(check){
$('*[data-queue="'+ check+'"] input:checkbox').prop('checked', false);
}, check);
});
更新
抱歉,没注意到 --checks='["215","216"]'
的 CLI 参数
当然不是数组:
console.log( checks );
console.log( typeof(checks) );
(注意引号'')
'[215,216]'
string
但是如果你这样使用它:--checks=["215","216"]
在脚本中:
console.log( typeof(eval(checks)) );
console.log( eval(checks)[1] );
object
216
(当然eval
是邪恶的,所以最好改变传入ID的格式)
casperjs casper/server.js --checks=215,216,15942,5435
console.log( typeof(checks.split(",")) );
console.log( JSON.stringify(checks.split(",")) );
object
["215","216","15942","5435"]
我正在编写脚本,我需要传递一些参数,我传递参数的方式是这样的:
xvfb-run casperjs --ignore-ssl-errors=true --ssl-protocol=any casper/server.js --checks='["215","216"]'
在server.js里面我把它赋给了一个变量:
var checks = casper.cli.get('checks');
然后在下面的代码中我循环使用代码:
casper.each(checks, function(check) {
$('*[data-queue="'+ check+'"] input:checkbox').prop('checked', false);
});
我的问题是,尽管我 console.log(checks) 来确认正在接收参数,但脚本一直在抱怨:
[error] [phantom] each() only works with arrays
不仅如此,如果我手动对数组进行硬编码,循环也不起作用。
casper.each 回调有两个参数,第一个是 Casper 模块本身,第二个是迭代变量。
casper.each(checks, function(self, check) {
// ...
});
如果你想操作 HTML 页面,那么它必须在页面上下文中完成,在 page.evaluate
:
casper.each(checks, function(self, check) {
self.evaluate(function(check){
$('*[data-queue="'+ check+'"] input:checkbox').prop('checked', false);
}, check);
});
更新
抱歉,没注意到 --checks='["215","216"]'
的 CLI 参数
当然不是数组:
console.log( checks );
console.log( typeof(checks) );
(注意引号'')
'[215,216]'
string
但是如果你这样使用它:--checks=["215","216"]
在脚本中:
console.log( typeof(eval(checks)) );
console.log( eval(checks)[1] );
object
216
(当然eval
是邪恶的,所以最好改变传入ID的格式)
casperjs casper/server.js --checks=215,216,15942,5435
console.log( typeof(checks.split(",")) );
console.log( JSON.stringify(checks.split(",")) );
object
["215","216","15942","5435"]