首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CasperJS:如何传递参数并在循环中使用它们

CasperJS:如何传递参数并在循环中使用它们
EN

Stack Overflow用户
提问于 2017-01-30 18:49:25
回答 1查看 383关注 0票数 1

我正在编写一个脚本,我需要传递一些参数,我传递参数的方式如下:

代码语言:javascript
复制
xvfb-run casperjs --ignore-ssl-errors=true --ssl-protocol=any casper/server.js --checks='["215","216"]'

在server.js内部,我将它赋值给一个变量:

代码语言:javascript
复制
var checks = casper.cli.get('checks');

然后在下面的代码中,我使用循环中的代码:

代码语言:javascript
复制
casper.each(checks, function(check) {
 $('*[data-queue="'+ check+'"] input:checkbox').prop('checked', false);
});

我的问题是,虽然我做了console.log(checks)来确认收到了参数,但是脚本一直在抱怨:

代码语言:javascript
复制
[error] [phantom] each() only works with arrays

不仅如此,如果我手动硬编码数组,那么循环也不能工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-30 19:14:52

casper.each回调使用两个参数,第一个参数是Casper模块本身,第二个参数是迭代变量。

代码语言:javascript
复制
casper.each(checks, function(self, check) {
    // ...
});

如果您想要操作HTML页面,那么它必须在页面的上下文中,在page.evaluate中完成

代码语言:javascript
复制
casper.each(checks, function(self, check) {
    self.evaluate(function(check){
        $('*[data-queue="'+ check+'"] input:checkbox').prop('checked', false);
    }, check);
});

更新

对不起,没有注意到--checks='["215","216"]'的CLI参数

当然,这不是一个数组:

代码语言:javascript
复制
console.log( checks );
console.log( typeof(checks) );

(注意引号‘')

215,216‘ 字符串

但是,如果您像这样使用它:--checks=["215","216"]和脚本中的:

代码语言:javascript
复制
console.log( typeof(eval(checks)) );
console.log( eval(checks)[1] );

对象 216

(当然eval是邪恶的,所以最好改变传入ID的格式)

casperjs casper/server.js --checks=215,216,15942,5435

代码语言:javascript
复制
console.log( typeof(checks.split(",")) );
console.log( JSON.stringify(checks.split(",")) );

对象 "215“、"216”、"15942“、"5435”

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41943324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档