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


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

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

[【楽天市場】ラッキーくじ](https://event.rakuten.co.jp/present/luckykuji/guide/)

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

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

[【楽天】ラッキーくじ一覧](https://kuji.rakuten.co.jp/)

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

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

**追記：**
よりお手軽に、Chrome拡張機能Tampermonkeyでも試してみたのでご参照ください。
[「楽天 ラッキーくじ」を自動化して、運試しをしてみる Tampermonkey篇](https://qiita.com/QDM/items/2f45f1a21dc813d429e8)

#事前準備

- 楽天への会員登録
- 楽天から様々なメールが送られてきても動じない覚悟（くじを引くと、楽天から様々なメールが送られてくるようになります）
- PythonでSeleniumが利用できる環境
 
[参考]
[Selenium with Python](https://selenium-python.readthedocs.io/) 
[PythonでSelenium](https://qiita.com/yasudaak/items/fee74db16163db3c9af9)

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

```python
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は、[【楽天】ラッキーくじ一覧](https://kuji.rakuten.co.jp/) から確認できます。

- 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関数じゃなくて、ちゃんとページロード完了待ちにしたい。
- エラー対応

#注意事項
- 楽天ラッキーくじの仕様変更などにより、本記事のスクリプトが動作しない場合があります。
- 今後、楽天ラッキーくじが終了する場合があります。