我可以成功登录网站,然后填写表格并获取结果。 现在我正在尝试为使用我的应用程序的任何人执行此操作。问题是我必须填写的表单的字段名称会更改为用户数量。
像这样:
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);
但不工作。有人可以帮助我吗?
最佳答案
在最后的代码片段中,您可以在 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);
关于javascript - 在 CasperJS 中用动态名称填充字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27423107/