Как запустить цикл с определенным интервалом в casperjs?

0

Я хочу автоматизировать нажатие кнопки с 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 раза?

  • 0
    Можете ли вы попробовать что-то вроде этого: "casper.start (' mysite.com/mypage').repeat(3 , function () {};"?
  • 0
    Нет, теперь, его нажатие только один раз
Теги:
casperjs

1 ответ

2
Лучший ответ

Вот решение, использующее 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();
  • 0
    Это отлично работает! благодарю вас
  • 0
    Могу ли я передать число вместо массива (клики)?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню