我可以成功登录网站,然后填写表格并获得结果。 现在我试图为使用我的应用程序的任何人这样做。问题是我必须填写的表单有一个字段名称,该名称会更改为用户数。
像这样:casper.thenOpen('http://www.foo.com/index.html', function() {
this.fill('form[action="/cgi-bin/login.cgi"]', { login: user,password:pass }, true);
this.click('input[type="submit"][name="enter"]');
this.wait(5000,function(){
this.capture('eff_ss2.png');
});
});
一切都很好,直到这里(我阅读登录并通过casper.cli.raw.get();
然后我这样做:
this.fill('form[action="../foo.cgi"]', {
'from_city': ori,
'to_city': dest,
'plan_03231': 'whatev',
'aspp_03231': 'whatev'
}, true);
03231
将根据登录用户而变化。如何动态执行此操作?我已经尝试过了:
var plan = 'plan_0'+user;
var obj{}
obj[plan] = 'whatev'
this.fill('form[action="../foo.cgi"]', {
'from_city': ori,
'to_city': dest,
obj,
'aspp_03231': 'whatev'
}, true);
但不起作用。有人可以帮帮我吗?
答案 0 :(得分:1)
在您的上一个代码段中,您在user
变量中拥有该用户的ID,但将对象放入对象项目位置。这不是有效的JavaScript。由于对象键是复合键,因此需要使用obj[''+id] = '';
语法设置它:
var obj = {
'from_city': ori,
'to_city': dest
};
obj['plan_0'+user] = 'whatev';
obj['aspp_0'+user] = 'whatev';
this.fill('form[action="../foo.cgi"]', obj, true);
您不需要显式用户ID的简单方法是使用^=
attribute matcher和casper.fillSelectors
根据名称属性的开头选择表单字段:
this.fillSelectors('form[action="../foo.cgi"]', {
'*[name="from_city"]': ori,
'*[name="to_city"]': dest,
'*[name^="plan_0"]': 'whatev'
'*[name^="aspp_0"]': 'whatev'
}, true);