ずぼらな人でも大丈夫！自動ログインでログインボーナスしっかりいただこうぜ！

## はじめに

ログインボーナスってあるじゃないですか。
毎日、会員サイトにアクセスするとポイントとかボーナスがもらえるやつです。

だいたいこういうのって〇〇ポイントを超えると「ランクが一つ上がる！」とか「ポイントと商品を交換！」とか地味に嬉しい特典が用意されているんですよね。

でも、自分で毎日欠かさずログインってなかなかできなくないですか？
私は先月のログインできたのはたったの2回です！( ･´ｰ･｀)ﾄﾞﾔ

というわけでタイトルの通り、「特定のWebサイトにアクセスして、ログインをする」を自動化したいと思います。

定期実行するのはColabだとPROプランじゃないと難しそうなので他の方法を検討中です！

## 準備

* chrome
* Colab

私はUbuntu OSですが、問題なく実行できました。

また、Colabについての説明は今回割愛しますのでググってみてください。

https://datamix.co.jp/media/datascience/what-is-google-colaboratory/

https://colab.google/

## コード解説

実は下記のコードにする前、webdriver.Chrome()でドライバを起動するところでエラーが発生しました。
下記のリンクを参考にインストール用のシェルを実行するように修正したところ解決しました。ノートブックも新しく作り直したほうがいいかもです。

https://github.com/kaliiiiiiiiii/Selenium-Profiles/issues/10

https://zenn.dev/omizunomitaro/articles/39837cf82b16d1

下記のコードをまずColabのコード部分にコピペして実行します。

```python
%%shell
# Ubuntu no longer distributes chromium-browser outside of snap
#
# Proposed solution: https://askubuntu.com/questions/1204571/how-to-install-chromium-without-snap

# Add debian buster
cat > /etc/apt/sources.list.d/debian.list <<'EOF'
deb [arch=amd64 signed-by=/usr/share/keyrings/debian-buster.gpg] http://deb.debian.org/debian buster main
deb [arch=amd64 signed-by=/usr/share/keyrings/debian-buster-updates.gpg] http://deb.debian.org/debian buster-updates main
deb [arch=amd64 signed-by=/usr/share/keyrings/debian-security-buster.gpg] http://deb.debian.org/debian-security buster/updates main
EOF

# Add keys
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys DCC9EFBF77E11517
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 112695A0E562B32A

apt-key export 77E11517 | gpg --dearmour -o /usr/share/keyrings/debian-buster.gpg
apt-key export 22F3D138 | gpg --dearmour -o /usr/share/keyrings/debian-buster-updates.gpg
apt-key export E562B32A | gpg --dearmour -o /usr/share/keyrings/debian-security-buster.gpg

# Prefer debian repo for chromium* packages only
# Note the double-blank lines between entries
cat > /etc/apt/preferences.d/chromium.pref << 'EOF'
Package: *
Pin: release a=eoan
Pin-Priority: 500


Package: *
Pin: origin "deb.debian.org"
Pin-Priority: 300


Package: chromium*
Pin: origin "deb.debian.org"
Pin-Priority: 700
EOF

# Install chromium and chromium-driver
apt-get update
apt-get install chromium chromium-driver

# Install selenium
pip install selenium

# Install pyvirtualdisplay
pip install pyvirtualdisplay
apt-get install -y xvfb
```

少し時間がかかるかもしれませんが、成功したことを確認したら、次に下記のコードをコピペして
適宜、内容をいじったら実行しましょう。

※ログイン画面は好きなサイトのURLを設定してください。
※USERNAMEとPASSWORDは左サイドメニューのシークレットから登録しておきます。ベタ書きでも動くことには動きますが。

```python
import time
import pyvirtualdisplay
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from google.colab import userdata

# 仮想ディスプレイ環境を構築
display = pyvirtualdisplay.Display(visible=0, size=(1024, 768))
display.start()

# ChromeDriverのオプションを設定
chrome_options = Options()
chrome_options.add_argument("--no-sandbox") # サンドボックスモードを無効に
chrome_options.add_argument('--disable-dev-shm-usage') # /dev/shmへのアクセスを禁止

username = userdata.get('USERNAME')
password = userdata.get('PASSWORD')

# ブラウザドライバの起動
chrome_driver = webdriver.Chrome(options=chrome_options)

# 対象Webサイトのログイン画面へアクセス
chrome_driver.get("ログインURL")

time.sleep(3)

# 認証情報を入力してログイン
username_field = chrome_driver.find_element(By.XPATH, '')
password_field = chrome_driver.find_element(By.XPATH, '')

username_field.send_keys(username)
password_field.send_keys(password)

# ログインを実行
username_field.submit()

time.sleep(3)

# ログイン成功画面をスクリーンショットしてキャプチャを保存
chrome_driver.save_screenshot('screenshot.png')

# 仮想ディスプレイを終了
chrome_driver.quit()
display.stop()
```

## まとめ

これで自動化は完成！と言いたいところですが、前述したとおり、Colabの定期実行機能はColab-PROじゃないと使えないみたいです、。

https://github.com/googlecolab/colabtools/wiki/Scheduled-notebooks

次の手を考えたいと思います。

## その他参考にしたサイト

https://terakoya.sejuku.net/question/detail/33693