【Python3】Amazonの商品を自動購入するボットを作ってみる

2021年11月12日

みなさま、おはこんばんにちはせなです。

今回はタイトルの通りAmazonの商品を自動で購入してくれるツールを作ってみようと思います。

環境構築

Seleniumを使用するので、以下のコマンドでseleniumをインストールしておきましょう。

pip3 install selenium

また chromedriver が必要となりますので、Homebrewを使用してこちらもインストールしておきます。

brew install chromedriver

手順

まず以下のコマンドでフォルダとファイルを作成します。(ディレクトリはどこでも良いです。amazon_botフォルダとか好きに作りましょう。)

mkdir amazon_bot
touch bot.py
vi amazon_bot/bot.py
import time
from selenium.webdriver import Chrome


# Amazonのログイン用メールアドレス
MAILADDRESS = 'xxxxx'
# Amazonのログイン用パスワード
PASSWORD = 'xxxx'


def main():
    driver = Chrome()
    login(driver)
    # login処理待ち
    time.sleep(1)

    # 商品ページに遷移
    driver.get('https://www.amazon.co.jp/dp/XXXXXXXXX')
    while True:
        try:
            # この商品は、Amazon.co.jp が販売、発送します。 のテキスト
            if len(driver.find_elements_by_id('merchant-info')) > 0:
                shop = driver.find_element_by_id('merchant-info')
                if 'Amazon' not in shop.text:
                    raise Exception('Not Amazon')

                # カートに入れる のボタン
                if  len(driver.find_elements_by_id('add-to-cart-button')) > 0:
                    # カートに入れる
                    driver.find_element_by_id('add-to-cart-button').click()
                    time.sleep(1)

                    # すぐに買う
                    driver.find_element_by_id('buy-now-button').click()
                    # 注文確定(念のためコメントアウト)
                    # driver.find_element_by_id('submitOrderButtonId-announce').click()

                    return None
                # 今すぐご予約ください のボタン
                elif len(driver.find_elements_by_id('buy-now-button')) > 0:

                    # 予約する
                    driver.find_element_by_id('buy-now-button').click()
                    time.sleep(1)
                    # 注文確定(念のためコメントアウト)
                    # driver.find_element_by_id('submitOrderButtonId').click()
                    
                    return None
                else:
                    raise Exception('Not Item')
                break
            else:
                raise Exception('Not Amazon')
        except:
            time.sleep(60)
            driver.refresh()


def login(driver):
    # Amazonのログイン画面URL
    driver.get('******')
    # ログイン処理
    login_input = driver.find_element_by_id('ap_email')
    login_input.send_keys(MAILADDRESS)
    driver.find_element_by_id('continue').click()
    password_input = driver.find_element_by_id('ap_password')
    password_input.send_keys(PASSWORD)
    driver.find_element_by_id('signInSubmit').click()


if __name__ == "__main__":
    main()

上記ファイルを作成したら、あとは実行するだけです。

python3 amazon_bot/bot.py

実行すると自動で、Chromiumが起動してAmazonのログインから商品ページまで遷移するはずです。
あとは60秒間隔で画面がリロードされ、Amazon販売の商品が購入できるか判定が行われます。

※「’chromedriver’ executable need to be on PATH」のようなエラーが出る場合があります。
その場合はPATHを正しく通す必要があります。

他にも「selenium.common.exceptions.WebDriverException: Message: Service chromedriver unexpectedly exited. Status code was: -9」のようなエラーが発生する事があります。
こちらはMacのシステムで許可が取れていないときなどに発生することがありますので、システム環境設定のセキュリティとプライバシーの一般タブからchromedriverを有効にしましょう。

以下のようなエラーが出る場合はChromeのバージョンがあっていないです。
下記リンクのページを参考にしてください。

selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version xxxxxx

SeleniumでChromeとChromedriverのバージョンを自動で揃える方法

最後に

ここまでお読みいただき有難うございました。
ではでは〜