Javascript CasperJS像for循环一样多次提交和评估
我正在尝试使用CasperJS自动化一些通常需要大量时间才能完成的步骤。基本上我需要登录到我们的CMS,并检查是否安装了一些插件。如果是,则只需更新它们,如果不是,则创建它们。我设法登录并进入带有插件列表的页面,但我在这里遇到了麻烦。以下是我需要做的,伪代码:Javascript CasperJS像for循环一样多次提交和评估,javascript,webkit,phantomjs,casperjs,headless-browser,Javascript,Webkit,Phantomjs,Casperjs,Headless Browser,我正在尝试使用CasperJS自动化一些通常需要大量时间才能完成的步骤。基本上我需要登录到我们的CMS,并检查是否安装了一些插件。如果是,则只需更新它们,如果不是,则创建它们。我设法登录并进入带有插件列表的页面,但我在这里遇到了麻烦。以下是我需要做的,伪代码: for every plugin defined in my config file populate the search plugins form and submit it evaluate if the respo
for every plugin defined in my config file
populate the search plugins form and submit it
evaluate if the response contains my plugin
这是密码
casper.thenOpen(snippetsUrl, function() {
console.log(colorizer.colorize("###############PROCESSING SNIPPETS###################", 'ERROR'));
this.capture('snippets.png');
this.each(Config.snippets.station, function(self, snippet) {
self.fill('form[id="changelist-search"]', {q: snippet.name}, true);
self.then(function() {
this.capture(snippet.name + '.png');
})
});
});
发生的情况是,我的表单在一行中被提交了多次,在我的“then”步骤中,我多次捕获同一页面……如何解决此问题?尝试以下方法:
this.each(Config.snippets.station, function(self, snippet)
{
self.then(function()
{
this.fill('form[id="changelist-search"]', {q: snippet.name}, true);
});
self.then(function()
{
this.capture(snippet.name + '.png');
})
});
初始代码不起作用的原因是Capser的then
声明了一个延迟执行步骤。如果没有意识到,您的代码实际上执行了以下操作:
submit form 1
place capture 1 into a queue
submit form 2
place capture 2 into a queue
submit form 3
place capture 3 into a queue
// then execute the queue
capture 1
capture 2
caprure 3
生成的代码将所有步骤都放在队列中,因此它们是按正确的顺序执行的。尝试以下操作:
this.each(Config.snippets.station, function(self, snippet)
{
self.then(function()
{
this.fill('form[id="changelist-search"]', {q: snippet.name}, true);
});
self.then(function()
{
this.capture(snippet.name + '.png');
})
});
初始代码不起作用的原因是Capser的then
声明了一个延迟执行步骤。如果没有意识到,您的代码实际上执行了以下操作:
submit form 1
place capture 1 into a queue
submit form 2
place capture 2 into a queue
submit form 3
place capture 3 into a queue
// then execute the queue
capture 1
capture 2
caprure 3
生成的代码将所有步骤都放在队列中,因此它们以正确的顺序执行。是,这与预期的一样有效。从你的回答中,我明白了我接下来的步骤也应该用self.then()函数包装……因此self是在页面中嵌套
then
“的关键字?@ReutSharabani,self
不是关键字,而是给定代码段中回调函数中的第一个参数的名称。你可以把它换成你喜欢的任何东西。但是,self
有适当的语义,可以代替这个
。我想我明白了,谢谢。我不知道这个.doSomething()和casper.doSomething()之间有什么区别。是的,这就像预期的一样。从你的回答中,我明白了我接下来的步骤也应该用self.then()函数包装……因此self是在页面中嵌套then
“的关键字?@ReutSharabani,self
不是关键字,而是给定代码段中回调函数中的第一个参数的名称。你可以把它换成你喜欢的任何东西。但是,self
有适当的语义,可以代替这个
。我想我明白了,谢谢。我不知道这个.doSomething()和casper.doSomething()之间有什么区别