LoginSignup
17
18

More than 5 years have passed since last update.

Switch購入をNightmare.jsで半自動化する

Last updated at Posted at 2017-08-25

Nightmare.js を見かけて、調べてみたら思いのほか簡単に扱えそうだったため、Switchの購入を自動化できないか試してみました。


Nightmareがv2(Electronベース)になり、使いやすく感動したのでLIGブログのPV/UUデータ取得を自動化してみた。


以下は、2分毎にカートに入っているか確認し、カートに入っていた場合は 「ご注文手続きへ」ボタンを押下させるスクリプトです。

CART_URL には、任意のSwitchをカートに入れた後のURLを設定する必要あり。

app.js
var Nightmare = require('nightmare');
var vo = require('vo');
var nightmare = Nightmare({ show: true });

// カートに入れた後のURLを設定
// 以下は「赤・黒・青・黒」のカラーリングのSwitchと、ゼルダのパッケージ版。
var CART_URL = "https://store.nintendo.co.jp/cart_index.html?request=insert&cx24base=HAC_S_KAYAA&cx24set1=KA&cx24set2=KA&cx24set3=BA&&cx24set4=PA&item_cd_list=HAC_P_AAAAA";

// カートにアイテムが入ったかを確認
// 商品リスト部分のHTMLに「HAC_S_KAYAA」(Switchの商品コード)が含まれているかを確認
// indexOfの結果を返す
function checkItem(nightmare) {
  return nightmare
    .goto(CART_URL)
    .evaluate(function () {
      return document.querySelector('.item_area').innerHTML.indexOf("HAC_S_KAYAA");
    });
}

// 「ご注文手続きへ」ボタンを押下する
function addToCart(nightmare) {
  return nightmare
    .click('#cartFlow .buttonarea .add')
}

// 商品リストチェックのループ用関数
// チェック結果次第で、ループするか、進むかを分岐
function* run() {
  // カートを開く
  yield nightmare
    .goto(CART_URL);

  // カートに入ったかを確認
  let match = yield checkItem(nightmare);

  if(match<1) {
    // 商品リストにSwitchが含まれていなかった場合
    // 2分待ってリロードし、再度チェック
    yield nightmare
      .wait(120000)
      .refresh();
    vo(run)(function(err, result) {
        if (err) throw err;
        console.log(result);
    });

  } else {
    // 商品リストにSwitchが含まれていた場合
    // 次のページへ進む!
    yield addToCart(nightmare);
  }

  return match;
}

// チェック開始!
vo(run)(function(err, result) {
    if (err) throw err;
    console.log(result);
});

チェックに成功すると、ログイン画面で待機状態になります。
ログインだとかはややこしそうなので省きました。

17
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
18