1

ログインしていくつかのアクションを実行することにより、サイトのテストを作成しようとしています。私は、動作に非常に近いスクリプトを持っていますが、回避できなかった重要な欠陥が 1 つあります。以下のロジックを参照してください

var phantom = require('phantom');
var rl = require('readline-sync');
var Spooky = require('spooky');

// Go to login page
spooky.start(url);

// Generate an image of the captcha 
spooky.then(function () {
  this.capture('captcha.png');
});

// Fill in login form
  spooky.then([{
    captcha: new Captcha()
  }, function () {
    this.fill('form#login-form', {
      'username': 'username',
      'password': 'password',
      'recaptcha_response_field' : captcha.phrase
    });
  }]);

  spooky.wait(5000, function() {
    this.capture('afterlogin.png');
  });

  spooky.run();

function Captcha() {
  return {
    phrase: ask("Enter Captcha Phrase: ")
  }
}

function ask (msg, options){
  return rl.question(msg, options)
}

したがって、これは画像をうまく生成し、フォームにうまく記入します。問題は、「new Captcha()」関数の挿入にあります。たとえば、フォームの画像を最初に表示する必要がない場合は、ユーザー名を入力して ask 関数で渡すと、すべて入力されます。しかし、これは不気味な約束の前に評価されるようです。

スクリプトを実行すると、最初にフレーズが要求され、入力後に画像が生成されます。フレーズを尋ねる前に画像を生成する必要があります。誰かが私の問題に光を当てることができれば、それは素晴らしいことです! さらに情報が必要な場合はお知らせください。

4

0 に答える 0