Я хочу автоматизировать нажатие кнопки с id='vote'
3 раза с интервалом в 5 секунд с помощью casperjs, для чего я написал код ниже
var casper = require('casper').create();
casper.start('http://www.mysite.com/mypage');
casper.repeat(3, function() {
this.click('#vote');
});
casper.then(function() {
console.log('clicked vote ,and voted successfully , and curernt url is ' + this.getCurrentUrl());
});
casper.run();
Но это только один раз, что я хочу сделать, это повторить цикл 3 раза с определенным интервалом, так как это сообщение ajax для JavaScript при нажатии кнопки голосования, и оно обновляет базу данных, делает ли она все 3 щелчка сразу? Что мне нужно сделать, чтобы избежать этого, и обновить базу данных 3 раза?
Вот решение, использующее wait и each. Следующий щелчок кнопки, ждет 3 секунды и циклически проходит через каждое значение массива. Цикл работает, я не могу проверить ваш клик.
var casper = require('casper').create ({
waitTimeout: 15000,
stepTimeout: 10000,
verbose: true,
viewportSize: {
width: 1400,
height: 768
},
pageSettings: {
"userAgent": 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.10 (KHTML, like Gecko) Chrome/23.0.1262.0 Safari/537.10',
"loadImages": false,
"webSecurityEnabled": false,
"ignoreSslErrors": true
},
onWaitTimeout: function() {
//throw new Error
},
onStepTimeout: function() {
//throw new Error
}
});
casper.on('remote.message', function(msg) {
console.log('***REMOTE MESSAGE***:', msg);
//throw new Error
});
// array of how many clicks
var clicks = [];
clicks[0] = 'click1';
clicks[1] = 'click2';
clicks[2] = 'click3';
casper.start('http://www.google.com/'); //+++ change the url
// function to click button
casper.Clicker = function () {
this.click('#vote');
this.echo('I just clicked');
return true;
};
//function to wait set time
casper.Waiter = function () {
// adjust wait time between clicks
this.wait(3000, function() {
this.echo('I waited for 3 seconds.');
});
return true;
};
// loop
casper.then(function() {
this.each(clicks, function() {
this.waitFor(function check() {
return this.Clicker();
});
this.waitFor(function check() {
return this.Waiter();
}, function then() {
this.echo('Olayy!');
});
});
});
casper.run();
Если вы хотите иметь цикл с установленными щелчками (не используя массив) и задавать интервалы:
var casper = require('casper').create ({
waitTimeout: 15000,
stepTimeout: 10000,
verbose: true,
viewportSize: {
width: 1400,
height: 768
},
pageSettings: {
"userAgent": 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.10 (KHTML, like Gecko) Chrome/23.0.1262.0 Safari/537.10',
"loadImages": false,
"webSecurityEnabled": false,
"ignoreSslErrors": true
},
onWaitTimeout: function() {
//throw new Error
},
onStepTimeout: function() {
//throw new Error
}
});
casper.on('remote.message', function(msg) {
console.log('***REMOTE MESSAGE***:', msg);
//throw new Error
});
// how many clicks
var clickCount = 3
casper.start('http://www.google.com'); //+++ change the url
// function to click button
casper.Clicker = function () {
this.click('#vote');
this.echo('I just clicked');
return true;
};
//function to wait set time
casper.Waiter = function () {
// adjust wait time between clicks
this.wait(3000, function() {
this.echo('I waited for 3 seconds.');
});
return true;
};
// loop
casper.then(function() {
for (var i = 0; i < clickCount; i++) {
this.waitFor(function check() {
return this.Clicker();
});
this.waitFor(function check() {
return this.Waiter();
});
}
this.echo('Olayy!');
});
casper.run();