如何在casperjs中运行具有特定间隔的循环?

时间:2013-12-04 12:39:40

标签: javascript jquery casperjs

我希望使用 casperjs 自动点击id='vote'按钮3次,间隔为5秒,因为我已经编写了以下代码

 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次,因为这是一个点击投票按钮的JavaScript ajax帖子,它更新了数据库,是否进行了所有3次点击立刻?我该怎么做才能避免这种情况,并将数据库更新3次?

1 个答案:

答案 0 :(得分:2)

以下是使用waiteach的解决方案。下面单击一个按钮,等待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();