Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
18
Help us understand the problem. What is going on with this article?
@Yakinik

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

More than 3 years have passed since last update.

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);
});

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

18
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Yakinik

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
18
Help us understand the problem. What is going on with this article?