【無料配布】PS5を自動購入するプログラム作ってみた!

プログラミング

どうも、なおです。

今回は発売から1年以上経った今でも品薄が続くPS5を自動で購入するプログラムを作ったので紹介します。

最後にソースコードの全文を公開していますので、ご自由にお使いください。

Amazonで自動購入する

今回はAmazonをスクレイピングして自動購入のプログラムを作りました。

「なぜAmazonなのか?」

理由はAmazon以外のオンラインショップが抽選方式を採用しているため、自動購入プログラムを作る意味がないからです。

Amazonは入荷されたら早いもの勝ちで購入でき、自動化することもできます

Chromedriverをインストールする

今までのSleniumの記事では最初にChromedriverのインストールをすることがお決まりでしたが、今回はwebdriver_managerというライブラリを使ってChromedriverを自動インストールしてみます

もちろんpipコマンドによるインストールは必須

pip install webdriver_manager

使い方はすごく簡単で今まで”chromedriver.exe”と書いていたところを、このように変更するだけ。

from webdriver_manager.chrome import ChromeDriverManager
from selenium import webdriver

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get('https://www.google.co.jp')

非常に簡単!!

注意:Herokuにデプロイする場合は使えないのでデプロイの際は、Herokuのchromedriverのパスを指定してください。

商品を購入する

Amazonの商品ページにアクセスして商品がある場合は購入ボタンを押す処理、商品がない場合はページをリロードする処理を書きます。(在庫が追加されるまでリロードし続ける)

こういった処理を書くときはtry/except文を用いることが多いです。

try/except文はエラーが発生した場合の処理を書くことができます。このように正常にコードが実行された場合の処理をtryに、エラーが発生した場合の処理をexceptに書きます。

try:
 print('処理が実行されました')

except:
 print('処理が実行できませんでした')

商品がある場合は購入ボタンを押す、ない場合はページをリロードする文を書きます。

while True:
 try:
   driver.find_element_by_id("buy-now-button").click()
    sleep(1)
    if driver.title == "Amazonサインイン":
     break
 except:
  driver.refresh()
    sleep(3)

whileは条件がtrueの場合、永遠に処理を繰り返す文法です。このコードでは直接Trueと書いてあるので強制的にwhile文に入ります。

購入ボタンを押すことができればtryの処理が、できなければexceptの処理が行われます。

購入ボタンを押すとログインページに変わり、HTMLのtitleタグが「Amazonサインイン」になるので、そうなった場合while文から抜け出すbreakを書いています。

逆に購入ボタンが押せなかった場合はページをリロードして約3秒間待機します。理由は永続的にページをリロードするとAmazonのサーバに負荷がかかり、Dos攻撃だと勘違いしてしまう可能性があるからです。

Dos攻撃とは・・ウェブサイトを稼働しているサーバに対して過剰な負荷をかけたり、脆弱性をついたりすることでサービスを妨害すること

Amazonアカウントにログインする

次に購入ボタンを押せた場合、Amazonアカウントのログインが必要になるのでログイン処理を書きます。

普段使っているAmazonはログイン状態が保持されているかもしれませんが、seleniumで開くchromeは少し特殊で毎回ログインする必要があります。

mail = 'mailadress@gmail.com'
password = 'mypassword1234'

driver.find_element_by_id("ap_email").send_keys(email)
driver.find_element_by_id("continue").click()
driver.find_element_by_id("ap_password").send_keys(password)
driver.find_element_by_id("signInSubmit").click()

mailにはアカウントのメールアドレスを、passwordにはアカウントのパスワードを代入しておきます。

Amazonのような大規模なサイトはそれぞれのタグにidが割り振られているのでseleniumを使う際には便利です。idがない場合xpathで指定するのですがxpathはどうしても長くなってしまうのでコード全体が見にくくなります。なのでできる限りidで指定するようにしましょう

決済を行う

最後に決済を行います。

お届け先住所や支払い方法についてはあらかじめ設定しておきましょう。

driver.find_element_by_xpath('/html/body/div[5]/div[2]/div/div/div[2]/div/div[1]/div/div[1]/div[1]/div/div[2]/span/span/span/span/input').click()
driver.find_element_by_xpath('/html/body/div[6]/div[2]/div/div/div[2]/div/div[1]/div/div[1]/div[1]/div/span/span/input').click()

決済ボタンと確定ボタンにはidがなかったので、xpathで指定しています。長くて見にくいですね。

これでコード全体は完了です。

完全自動化する

このままだとパソコンを起動中しかプログラムを実行できないので、サーバにデプロイしましょう。

サーバにデプロイする方法はこちらの記事を参照してください。

最後に

今回はAmazonの商品を自動購入するプログラムを作ってみましたが、いかがでしたか?

下にソースコードの全文を書いているのでご自由にお使いください。

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from time import sleep

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get("Amazon商品ページ")
sleep(5)

#アカウント情報
email = "メールアドレス"
password = "パスワード"

# 購入処理
while True:
    try:
        driver.find_element_by_id("buy-now-button").click()
        sleep(1)
        if driver.title == "Amazonサインイン":
            break
    except:
        driver.refresh()
        sleep(3)

#ログイン処理
driver.find_element_by_id("ap_email").send_keys(email)
driver.find_element_by_id("continue").click()
driver.find_element_by_id("ap_password").send_keys(password)
driver.find_element_by_id("signInSubmit").click()
sleep(2)
#決済処理
driver.find_element_by_xpath('/html/body/div[5]/div[2]/div/div/div[2]/div/div[1]/div/div[1]/div[1]/div/div[2]/span/span/span/span/input').click()
driver.find_element_by_xpath('/html/body/div[6]/div[2]/div/div/div[2]/div/div[1]/div/div[1]/div[1]/div/span/span/input').click()

Herokuにデプロイする場合は5行目を削除して下記のコードを追加してください。

from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless')
driver = webdriver.Chrome('/app/.chromedriver/bin/chromedriver', options=options)

それでは、また!

【なおくんのSNS】

【note】

noteでもスマホやパソコンなどの記事を書いていますので、ぜひご覧ください。あとフォローもお願いします。

【案件の依頼やお問い合わせはこちら】

    プログラミング
    naokunをフォローする
    なおコンサルティング
    タイトルとURLをコピーしました