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

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

Seleniumで「楽天 ラッキーくじ」を自動化して、運試しをしてみる

楽天ラッキーくじについて

楽天には「ラッキーくじ」というくじ引きがあります。楽天会員であれば、誰でもPCブラウザやスマホで引けるくじです。1日1回引くことができます。

【楽天市場】ラッキーくじ

もしくじに当たれば、楽天スーパーポイントを獲得できます。当選本数は、1,000~5,000ポイント(1名)、1ポイント(1000~5000名)程度と、実際のところなかなか当たりません。

とはいえ、「【楽天】ラッキーくじ一覧」を見るとわかりますが、いろいろと種類があり、けっこう数が多いため、毎日まとめて引けば当選のチャンスを増やせそうです。数打ちゃ当たる作戦ですね。

【楽天】ラッキーくじ一覧

しかしながら、毎日手作業でくじ引きするのは、かなり骨が折れます。そこで本記事では、Seleniumを利用して、くじ引きの自動化に挑戦してみます。

なお、いろいろと作り込むのが面倒そうなので、今回はPC版のラッキーくじ(楽天パンダのルーレットバージョン)のみに限定しました。

追記:
よりお手軽に、Chrome拡張機能Tampermonkeyでも試してみたのでご参照ください。
「楽天 ラッキーくじ」を自動化して、運試しをしてみる Tampermonkey篇

事前準備

  • 楽天への会員登録
  • 楽天から様々なメールが送られてきても動じない覚悟(くじを引くと、楽天から様々なメールが送られてくるようになります)
  • PythonでSeleniumが利用できる環境

[参考]
Selenium with Python
PythonでSelenium

楽天へのログイン / くじ引きの自動化

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import time

# 指定URLの楽天くじを引く関数 [楽天パンダのルーレットバージョンのみ対応]
def openRakutenLuckyKuji(pDriver, pURL):
    try:
        pDriver.get(pURL) # 楽天くじURLを開く
        time.sleep(5)
        pDriver.find_element_by_xpath("//*[@id='entry']").click() # Startボタン
        time.sleep(20) # ルーレットくじの待ち時間
    except NoSuchElementException:
        print("- NoSuchElementException発生 - 次の処理へ")
        time.sleep(1)

#--
# Chromeを開く
webdriverpath = "/Chrome webdriverへのパス/" # Webdriver Path
options =  webdriver.ChromeOptions()
driver = webdriver.Chrome(webdriverpath)
driver.set_window_size(1300,1040)

# 楽天くじ URLリスト [楽天パンダのルーレットバージョン]
lstURL = [
    "https://kuji.rakuten.co.jp/ad********", # Rakuten ラッキーくじ
    "https://kuji.rakuten.co.jp/ff********", # 楽天ブックスくじ
    "https://kuji.rakuten.co.jp/46********", # Rakuten TVくじ
    ....
     ※【楽天ラッキーくじ一覧ページからURLを確認してここに記述します
    ....
]

# 楽天トップページに移動
url = "https://www.rakuten.co.jp"
driver.get(url)

# 楽天ログインページに移動
url = "https://grp01.id.rakuten.co.jp/rms/nid/vc?__event=login&service_id=top"
driver.get(url)
time.sleep(5)

# 楽天にログイン
elem_search_word = driver.find_element_by_id("loginInner_u")
elem_search_word.send_keys("YOUR Login ID") # USER ID
elem_search_word = driver.find_element_by_id("loginInner_p")
elem_search_word.send_keys("YOUR Password") # USER PASSWORD
driver.find_element_by_css_selector('input[type="submit"]').click()
time.sleep(10)

# 楽天ラッキーくじのURLリストを開く
for itemURL in lstURL:
    openRakutenLuckyKuji(driver, itemURL)

# 処理終了
driver.close

print("くじ引きが終わりました!")

くじに運良く当選すると、楽天から当選通知メールが届きます。

楽天パンダのルーレットバージョンのラッキーくじ一覧

楽天ラッキーくじのURLは固定ではなく、一定期間ごとに変更されるようです。
各ラッキーくじのURLは、【楽天】ラッキーくじ一覧 から確認できます。

  • Rakuten ラッキーくじ
  • 楽天ブックス
  • Rakuten TV
  • Rakuten × ぐるなび
  • 楽天保険の総合窓口
  • 楽天レシピ
  • 楽天Edy
  • 楽天ウェブ検索
  • Infoseek ポイナビ
  • 楽天ビューティー
  • 楽天車検
  • 楽天市場 くじ広場
  • 楽天toto
  • 楽天デリバリー
  • 楽天カレンダー
  • 楽天ペイ
  • 楽天不動産

など

当選結果

当選結果は、後日ここで発表予定です。
もしかしたら1ポイントも当たらないかもしれませんが、とりあえず12月25日まで毎日やってみます。

日付 くじ引き件数 当選回数 当選ポイント
12/10 23 0 0
12/11 23 0 0
12/12 23 0 0
12/13 23 :tada: 1 1
12/14 23 0 0
12/15 23 0 0
12/16 25 :tada: 1 1
12/17 25 0 0
12/18 22 :tada: 1 1
12/19 21 :tada: 2 2
12/20 21 0 0
12/21 20 :tada: 2 2
12/22 20 :tada: 1 1
12/23 20 0 0
12/24 20 0 0
12/25 20 0 0
合計 352 8 8

当選確率: 2.27%(44回に1回)

という結果になりました。40~50回に1回程度、当選するようです。
当たっても、せいぜい1ポイントなので、地道にやり続けるはかなり微妙かもしれません。

課題

  • 楽天パンダのルーレットバージョン、PC版以外のくじ引きも自動化してみたい。
  • くじの結果を判定して、ログを残したい。
  • ラッキーくじのURLが変更される際に、自動的に対応できるようにしたい。
  • sleep関数じゃなくて、ちゃんとページロード完了待ちにしたい。
  • エラー対応

注意事項

  • 楽天ラッキーくじの仕様変更などにより、本記事のスクリプトが動作しない場合があります。
  • 今後、楽天ラッキーくじが終了する場合があります。
20
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
20
Help us understand the problem. What is going on with this article?