目次
はじめに
上のようなボタンをクリックしたら、特定の商品がAmazonで自動注文される「Amazon自動注文ボタン」を自作しました。
上記ブログは、ボタン側をESP32で自作したものを採用していますが、ボタン側は「AWS の Seeed IoT Button」や「SORACOM LTE-M Button」などいろいろな実装方法があります。
一方、AWS側の処理はボタンのクリック情報をAWS IoT Coreのイベントとして認識させ、その後自動購入スクリプトをAWS Lambda上で実行する流れは共通的に使えるようです。
そのため、本ブログではAWS側の処理部分のみを切り出して作成過程をまとめました。
Amazon自動注文ボタンのAWS側処理の構築手順
自動購入スクリプトにはSeleniumやChromeドライバなどを使用するのですが、Lambda関数はランタイムとして標準的な実行環境しか準備されていないため、AWS Lambdaレイヤを使ってSeleniumやChromeドライバなどを事前準備することにします。
また、Lambda関数上で秘密情報を直接扱うのはAWSベストエフォートとして問題ありそうなので、秘密情報は「AWS Systems Managerのパラメータストア」を利用することにします。
【手順概要】
- Lambdaレイヤーを作成する
- AWS Systems Managerのパラメータストアに秘密情報を登録する
- Lambda関数用のIAMポリシーを作成する
- Lambda関数を作成する
- Lambda関数に自動注文スクリプトを登録する
- Lambda関数にLambdaレイヤをアタッチする
- Lambda関数にIAMポリシーをアタッチする
- Lambda関数の基本設定を変更する
- AWS IoT CoreのルールにLambda関数を登録する
Lambdaレイヤーを作成する
Selenium、chromedriver、headless-chromiumはAWS Cloud9で構築し、それをZIPファイル化します。
用途 | ZIPファイルの名前 | Lambdaレイヤの名前 |
---|---|---|
PythonのSeleniumライブラリ | python.zip | selenium (レイヤにZIPファイルを紐づけ) |
headless-chromiumと chromedriver | headless _[headless-chromiumのバージョン] _[chromedriverのバージョン].zip | headless (ZIPファイルはS3に格納し、 レイヤにはS3のURLを紐づけ) |
以下に簡単な構築手順をまとめました。
AWS LambdaレイヤにアタッチするZIPファイルを作成する
AWS LambdaレイヤにアタッチするZIPファイルを2つ作成します。
- python.zip
- Seleniumを格納したZIPファイル
- [python/lib/python3.7/site-packages/*]にSeleniumをインストールします。
- headless_[headless-chromiumのバージョン]_[chromedriverのバージョン].zip
- headless-chromiumとchromedriverを格納したZIPファイル
- [headless/*]に各ファイルをダウンロードします。
以下に、AWS Lambdaレイヤ用の環境を準備する方法をまとめました。
- AWSマネージメントコンソールにログインする。
- 「AWS Cloud9」にアクセスして、[Create environment]をクリックする。
- [Name environment]画面が開いたら、Name、Descriptionを入力して[Next step]をクリックする。
設定項目 | 設定例 |
---|---|
Name | 任意のCloud9の環境名 (例: python_for_lambda) |
Description | Cloud9の環境の説明 (オプションのため空欄でも可) |
- [Configure settings]画面が開いたら、EC2の最小構成を選択して[Next step]をクリックする。
設定項目 | 設定例 |
---|---|
Environment type | Create a new EC2 instance for environment(direct access) |
Instance type | t2.micro (1 GiB RAM + 1 vCPU) |
Platform | Amazon Linux 2 (recommended) |
Cost-saving setting | After 30 minutes (default) |
LAM role | AWSServiceRoleForAWSCloud9(固定) |
- [Review]画面が開いたら、内容を確認して問題なければ、[Create environment]をクリックする。
- EC2の生成が完了したら、以下のようにEC2の編集画面が出てくる。
- 下部にあるコマンドコンソール部分で以下のコマンドを実行し、Seleniumをインストールする。
$ pip install selenium==3.141.0 -t python/lib/python3.7/site-packages
- 同じく下部にあるコマンドコンソール部分で以下のコマンドを実行し、headless-chromiumとchromedriverをダウンロードする。
【headless-chromiumのダウンロード】
$ mkdir -p headless
$ curl -SL https://github.com/adieuadieu/serverless-chrome/releases/download/v1.0.0-37/stable-headless-chromium-amazonlinux-2017-03.zip > headless-chromium.zip
$ unzip -o headless/headless-chromium.zip -d ./headless
$ rm headless/headless-chromium.zip
【chromedriverのダウンロード】
$ curl -SL https://chromedriver.storage.googleapis.com/2.37/chromedriver_linux64.zip > chromedriver.zip
$ unzip -o chromedriver.zip -d ./headless
$ rm headless/chromedriver.zip
- pythonフォルダをpython.zipという名前でダウンロードする。
- headlessフォルダをheadless_[headless-chromiumのバージョン]_[chromedriverのバージョン].zipという名前でダウンロードする。
Selenium、headless-chromiumとchromedriverをダウンロード完了すると、Cloud9のフォルダ構成は以下のようになっていると思います。
各フォルダを[右クリック > ダウンロード]を選択することでZIPファイルとしてダウンロードできます。
Selenium用のLambdaレイヤを作成する
前手順で作成したSeleniumライブラリが格納された「python.zip」を起動させるLambdaレイヤを作成します。
以下に、AWS Lambdaレイヤ用の環境を準備する方法をまとめました。
- AWSマネージメントコンソールにログインする。
- 「AWS Lambda」にアクセスする。
- 左側のメニューから「その他のリソース > レイヤー」を選択し、「レイヤーの作成」をクリックする。
- 「レイヤー設定」画面が表示されるので、以下の設定例を参考に入力し、下部の「作成」ボタンをクリックする。
設定項目 | 設定例 |
---|---|
名前 | selenium |
説明 | 任意のものを記入 |
アップロード方法 | 「.zipファイルをアップロード」にチェック |
アップロード対象 | 「python.zip」をアップロード |
互換性のあるアーキテクチャ | 「x86_64」にチェック |
互換性のあるランタイム | 「Python 3.7」を選択 |
「レイヤー seleniumのバージョン*が正常に作成されました。」と表示されれば、作成完了です。
chrome関連ファイル用のLambdaレイヤを作成する
headless-chromiumとchromedriverをまとめたZIPファイルはサイズが大きいため、AWS Lambdaレイヤの「.zipファイルをアップロード」で設定するとエラーとなってしまいます。
そのため、headless-chromiumとchromedriverをまとめたZIPファイルはS3に格納したうえで、「Amazon S3からファイルをアップロードする」でLambdaレイヤの設定を行います。
chrome関連のZIPファイルをS3に格納する
- AWSマネージメントコンソールにログインする。
- 「AWS S3」にアクセスする。
- メニューから「バケット」を選択して、「バケットを作成」ボタンをクリックする。
- 「一般的な設定」画面が開くので、以下の設定値を入力し、下部にある「バケットを作成」ボタンをクリックする。
設定項目 | 設定例 |
---|---|
バケット名 | headless-chromium-yyyymmddhhmm ※「yyyymmddhhmm」に日付を入れて一意な名称にしてます |
AWSリージョン | アジアパシフィック(東京) ap-northeast-1 |
※自分は、上記設定以外はデフォルトのままに設定しましたが、ご自分の環境に合わせて設定してください。
パケット「headless-chromium-yyyymmddhhmm」が正常に作成されました。」と表示され、バケット一覧に作成したバケット名が表示されれば、バケット作成は完了です。
次に、そのバケットにchrome関連のZIPファイルを格納します。
- バケット一覧の中から、上で作成したバケット名をクリックする。
- オブジェクトタブを選択し、「アップロード」ボタンをクリックする。
- 「アップロード」画面が開いたら、ファイルとフォルダの「ファイルを追加」をクリックして、前章で作成した「headless.zip」をアップロードする。
- 「アップロード」画面右下の「アップロード」ボタンをクリックする。
「アップロードが成功しました。」と表示されれば、S3の設定完了です。
- S3にアップロードした「headless.zip」のオブジェクトURLをメモする。
chrome関連ファイル用のLambdaレイヤを作成する
前章で作成したChrome関連ファイルが格納された「headless.zip」を起動させるLambdaレイヤを作成します。
以下に、AWS Lambdaレイヤ用の環境を準備する方法をまとめました。
- AWSマネージメントコンソールにログインする。
- 「AWS Lambda」にアクセスする。
- 左側のメニューから「その他のリソース > レイヤー」を選択し、「レイヤーの作成」をクリックする。
- 「レイヤー設定」画面が表示されるので、以下の設定例を参考に入力し、下部の「作成」ボタンをクリックする。
設定項目 | 設定例 |
---|---|
名前 | headless |
説明 | 任意のものを記入 |
アップロード方法 | 「Amazon S3からファイルをアップロードする」にチェック |
Amazon S3のリンクURL | S3にアップロードした「headless.zip」のオブジェクトURL |
互換性のあるアーキテクチャ | 「x86_64」にチェック |
互換性のあるランタイム | 「Python 3.7」を選択 |
「レイヤー headlessのバージョン*が正常に作成されました。」と表示されれば、作成完了です。
AWS Systems Managerのパラメータストアに秘密情報を登録する
「AWS Systems Manager」に以下のようなパラメータを登録する方法をまとめました。
パラメータ名 | 値 |
---|---|
AmazonLoginID | ご自分のAmazonアカウントのログインID |
AmazonLoginPassWord | ご自分のAmazonアカウントのログインパスワード |
- AWSマネージメントコンソールにログインする。
- 「AWS Systems Manager」にアクセスして、左側のメニューにある「パラメータストア」をクリックする。
- 「AWS Systems Manager パラメータ」画面が開くので、「パラメータの作成」をクリックする。
- 「パラメータを作成」画面が開くので、以下の設定項目を入力し、右下の「パラメータを作成」をクリックする。
設定項目 | 設定例 (AmazonLoginID) | 設定例 (AmazonLoginPassWord) |
---|---|---|
名前 | AmazonLoginID | AmazonLoginPassWord |
説明 | 任意 | 同左 |
利用枠 | 「標準」を選択 | 同左 |
タイプ | 「安全な文字列」を選択 | 同左 |
KMS キーソース | 「現在のアカウント」を選択 | 同左 |
KMSキー ID | 「alias/aws/ssm」を選択 | 同左 |
値 | ご自分のAmazonアカウントの ログインID | ご自分のAmazonアカウントの ログインパスワード |
「アクティベーション~」と表示されればOKです。
Lambda関数用のIAMポリシーを作成する
Lambda関数では以下の処理をするため、IAMポリシーで権限を付与します。
- LambdaレイヤでS3からZIPファイルをダウンロードする
- Lambda関数からSystems Manager(SSM)にアクセスする
- AWSマネージメントコンソールにログインする。
- 「IAM」にアクセスする。
- 左側のメニューにある「ポリシー」をクリックする。
- 「ポリシーの作成」画面が開いたら、「JSON」タブを選択し、以下のJSONコードを入力して、右下にある「次のステップ:タグ」をクリック
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": "arn:aws:s3:::*"
},
{
"Effect": "Allow",
"Action": [
"ssm:GetParameters"
],
"Resource": [
"arn:aws:ssm:*:*:parameter/AmazonLoginID",
"arn:aws:ssm:*:*:parameter/AmazonLoginPassWord"
]
}
]
}
- 「タグを追加(オプション)」画面が開いたら、右下の「次のステップ:確認」をクリックする。
- 「ポリシーの確認」画面が開いたら、以下の設定項目を入力し、右下の「ポリシーの作成」をクリックする。
設定項目 | 設定例 |
---|---|
名前 | 任意のポリシー名 (例: autoPurcaserPolicy) |
説明 | 任意 |
「The policy xxxxx has been created」と表示されればOKです。
Lambda関数を作成する
以下に、AWS Lambda関数を作成する方法をまとめました。
- AWSマネージメントコンソールにログインする。
- 「AWS Lambda」にアクセスする。
- ダッシュボード画面の右上にある「関数を作成」ボタンをクリックする。
- 「関数の作成」画面が表示されるので、以下の設定例を参考に入力し、下部の「関数の作成」ボタンをクリックする。
設定項目 | 設定例 |
---|---|
関数の作成 オプション | 「一から作成」を選択 |
関数名 | 任意のものを記入 (例:autoPurcaser) |
ランタイム | Python 3.7 |
アーキテクチャ | 「x86_64」にチェック |
デフォルトの実行ロールの変更 | 「基本的なLambda アクセス権限で新しいロールを作成」にチェック |
「関数xxxxxを正常に作成しました。」と表示されれば、Lambda関数の作成はできています。
Lambda関数に自動注文スクリプトを登録する
以下に、Lambda関数に自動注文スクリプトを登録する手順をまとめました。
- 前章で作成したLambda関数のページを開く。
- 「コード」タブを開き、以下のサンプルコードを入力し、「Deploy」をクリックする。
サンプルコード
import time,json,boto3
from datetime import datetime
from selenium import webdriver
from selenium.webdriver.common.by import By
AMAZON_TOP_URL = 'https://www.amazon.co.jp/'
ITEM_URL = 'https://www.amazon.co.jp/dp/B01BEPNPF6'
def logPrint(str):
print("%s : %s"%(datetime.now().strftime("%Y/%m/%d %H:%M:%S"),str))
def lambda_handler(event, context):
logPrint("### START autoPurcaser ###")
# SSMから秘密情報を取得
logPrint("### Get Secret Param from SSM ###")
try:
ssm = boto3.client('ssm')
ssm_response = ssm.get_parameters(
Names = [
'AmazonLoginID',
'AmazonLoginPassWord',
],
WithDecryption=True
)
AMAZON_LOGIN_ID = ssm_response['Parameters'][0]['Value']
AMAZON_LOGIN_PASSWORD = ssm_response['Parameters'][1]['Value']
except Exception as e:
logPrint('Failed to get secret param from SSM.')
logPrint(e)
exit()
# ブラウザの起動
logPrint("### Open Top Page ###")
try:
options = webdriver.ChromeOptions()
options.add_argument("--headless")
options.add_argument("--disable-gpu")
options.add_argument("--hide-scrollbars")
options.add_argument("--single-process")
options.add_argument("--ignore-certificate-errors")
options.add_argument("--window-size=880x996")
options.add_argument("--no-sandbox")
options.add_argument("--homedir=/tmp")
options.binary_location = "/opt/headless/headless-chromium"
browser = webdriver.Chrome(
"/opt/headless/chromedriver",
options=options
)
browser.get(AMAZON_TOP_URL)
time.sleep(1)
except Exception as e:
logPrint('Failed to open browser.')
logPrint(e)
exit()
# ログイン
logPrint("### Login ###")
try:
# ログインが必要かチェック
if len(browser.find_elements(By.ID, 'nav-greeting-name')) > 0:
logPrint("Already logged in.")
else:
logPrint("ID:{0}, num:{1}".format("nav-link-accountList", len(browser.find_elements(By.ID, 'nav-link-accountList'))))
browser.find_element(By.ID, 'nav-link-accountList').click()
time.sleep(1)
logPrint("ID:{0}, num:{1}".format("ap_email", len(browser.find_elements(By.ID, 'ap_email'))))
browser.find_element(By.ID, 'ap_email').send_keys(AMAZON_LOGIN_ID)
logPrint("ID:{0}, num:{1}".format("continue", len(browser.find_elements(By.ID, 'continue'))))
browser.find_element(By.ID, 'continue').click()
time.sleep(1)
logPrint("ID:{0}, num:{1}".format("ap_password", len(browser.find_elements(By.ID, 'ap_password'))))
browser.find_element(By.ID, 'ap_password').send_keys(AMAZON_LOGIN_PASSWORD)
logPrint("ID:{0}, num:{1}".format("signInSubmit", len(browser.find_elements(By.ID, 'signInSubmit'))))
browser.find_element(By.ID, 'signInSubmit').click()
time.sleep(1)
# 「携帯電話番号を追加する」が表示された場合、「後で」をクリック
if len(browser.find_elements(By.ID, 'auth-account-fixup-phone-form')) > 0:
browser.find_element(By.ID, 'ap-account-fixup-phone-skip-link').click()
time.sleep(1)
logPrint("Logged in now.")
except Exception as e:
logPrint('Failed to login.')
logPrint(e)
exit()
# 購入する商品のページにアクセス
logPrint("### Open Item Page ###")
try:
browser.get(ITEM_URL)
time.sleep(1)
except Exception as e:
logPrint('Failed to open ITEM_URL.')
logPrint(e)
exit()
# 商品のチェック
#### 必要あれば、購入元のチェックや値段などの商品チェックを入れる #####
# カートに追加
logPrint("### Add To Cart ###")
try:
logPrint("ID:{0}, num:{1}".format("add-to-cart-button", len(browser.find_elements(By.ID, 'add-to-cart-button'))))
browser.find_element(By.ID, 'add-to-cart-button').submit()
time.sleep(1)
except Exception as e:
logPrint('Failed to add To Cart.')
logPrint(e)
exit()
# レジに進む
logPrint("### Proceed To Cashier ###")
try:
browser.get('https://www.amazon.co.jp/gp/cart/view.html/ref=nav_cart')
logPrint("ID:{0}, num:{1}".format("sc-buy-box-ptc-button", len(browser.find_elements(By.ID, 'sc-buy-box-ptc-button'))))
browser.find_element(By.ID, 'sc-buy-box-ptc-button').click()
time.sleep(1)
except Exception as e:
logPrint('Failed to proceed to cashier.')
logPrint(e)
exit()
# パスワードを聞かれたら、再度パスワードを設定
try:
# ログインが必要かチェック
if len(browser.find_elements(By.ID, 'auth-alert-window')) > 0:
logPrint("Logged in again")
logPrint("ID:{0}, num:{1}".format("ap_password", len(browser.find_elements(By.ID, 'ap_password'))))
browser.find_element(By.ID, 'ap_password').send_keys(AMAZON_LOGIN_PASSWORD)
logPrint("ID:{0}, num:{1}".format("signInSubmit", len(browser.find_elements(By.ID, 'signInSubmit'))))
browser.find_element(By.ID, 'signInSubmit').click()
time.sleep(1)
except Exception as e:
logPrint('Failed to login.')
logPrint(e)
exit()
'''
# 購入内容の確認
logPrint("### Confirm Payment ###")
try:
logPrint("ID:{0}, num:{1}".format("bottomSubmitOrderButtonId", len(browser.find_elements(By.ID, 'bottomSubmitOrderButtonId'))))
browser.find_element(By.ID, 'bottomSubmitOrderButtonId').click()
time.sleep(1)
except Exception as e:
logPrint('Failed to confirm payment.')
logPrint(e)
exit()
'''
# ブラウザを閉じる
logPrint("### Close Browser ###")
try:
browser.close()
except Exception as e:
logPrint('Failed to close browser.')
logPrint(e)
exit()
logPrint("### FINISH autoPurcaser ###")
return {
'statusCode': 200,
'body': json.dumps('autoPurcaser completed!')
}
ITEM_URL
は[Amazon限定ブランド] キリン LAKURASHI アルカリイオンの水 PET (2L×9本)を選択しています。もし他の商品に変更する場合は、プログラムを修正する必要があるかもしれません。事前に動作するか確認してください。購入内容の確認
の部分はあえて無効化しています。そのため、このプログラムを実行しても商品がカートに追加されるだけで、購入まで至りません。この部分は動作確認が完了したら有効化します。
「関数xxxxxが正常に更新されました。」と表示されれば、OKです。
Lambda関数にLambdaレイヤをアタッチする
以下に、Lambda関数にLambdaレイヤをアタッチする手順をまとめました。
- 前章同様に作成したLambda関数のページを開く。
- 「コード」タブを開き、下部にあるレイヤーで「レイヤーの追加」をクリックする。
- 「レイヤを追加」画面が開いたら、前ブログで作成したSelenium用のLambdaレイヤを設定して、右下の「追加」ボタンをクリックする。
設定項目 | 設定例 |
---|---|
レイヤーソース | 「カスタムレイヤー」を選択 |
カスタムレイヤ | Selenium用のLambdaレイヤで設定したレイヤ名(例:selenium) |
バージョン | 1 (最大5つまで登録できる、レイヤに紐づけているZIPファイルがかわると バージョンが自動で上がっていく) |
- Lambda関数の設定画面に戻ったら、同様に下部にあるレイヤーで「レイヤーの追加」をクリックする。
- 「レイヤを追加」画面が開いたら、前ブログで作成したchrome関連ファイル用のLambdaレイヤを設定して、右下の「追加」ボタンをクリックする。
設定項目 | 設定例 |
---|---|
レイヤーソース | 「カスタムレイヤー」を選択 |
カスタムレイヤ | chrome関連ファイル用のLambdaレイヤで設定したレイヤ名(例:headless) |
バージョン | 1 (最大5つまで登録できる、レイヤに紐づけているZIPファイルがかわると バージョンが自動で上がっていく) |
「関数xxxxxが正常に更新されました。」と表示されれば、OKです。
Lambda関数にIAMポリシーをアタッチする
以下に、Lambda関数にIAMポリシーをアタッチする手順をまとめました。
- 前章同様に作成したLambda関数のページを開く。
- 「設定」タブを開き、左メニューで「アクセス権限」を開く。
- 実行ロールに登録されているロール名のリンクをクリックする。
- IAMロールのページに飛ぶので、アクセス権限タブの「ポリシーをアタッチします」ボタンをクリックする。
- 「アクセス権限をアタッチする」画面が開くので、前ブログで作成したIAMロール「autoPurcaserPolicy」を選択して、右下の「ポリシーのアタッチ」ボタンをクリックする。
前ブログで作成したIAMロール「autoPurcaserPolicy」がアタッチされればOKです。
Lambda関数の基本設定を変更する
以下に、Lambda関数の基本設定を変更する手順をまとめました。
- 前章同様に作成したLambda関数のページを開く。
- 「設定」タブを開き、左メニューで「一般設定」を開く。
- 「編集」ボタンをリリックする。
- 「基本設定を編集」画面が開いたら、以下のように設定を変更して右下の「保存」をクリックする。
設定項目 | 設定例 |
---|---|
メモリ | 256MB |
タイムアウト | 3分3秒 |
それ以外 | デフォルトの設定のまま |
※デフォルトの設定だとタイムアウトやメモリ不足となるため、少し多めに変更しています。
「変更を保存しました。」と表示されれば、OKです。
AWS IoT CoreのルールにLambda関数を登録する
AWS IoT Coreで特定のトピックを受信したら、Lambda関数を実行するようにします。
手順を以下に記載します。
- 「AWS IoT Core」にアクセスする。
- 左側のメニューから[ACT > ルール]をクリックし、「ルールの作成」をクリックする。
- 「ルールの作成」画面が開いたら、以下の情報を入力する。
設定項目 | 設定例 |
---|---|
名前 | 任意のルール名 (例: pushButtonActionRule) |
説明 | 任意の説明文 |
ルールクエリステートメント > SQLバージョン | 2016-03-23(変更なし) |
ルールクエリステートメント > ルールクエリステートメント | 「SELECT * FROM '<ESP32がPublishするトピック名>' 」(例: 「 SELECT * FROM 'esp32/pub' 」) |
- 「1つ以上のアクションを設定する」の「アクションを追加」ボタンをリックする。
- 「アクションを選択してください」画面が開くので、「メッセージデータを渡すLambda関数を呼び出す」を選択し、「アクションの設定」ボタンをクリックする。
- 「アクションの設定」画面が開くので、前章で作成したLambda関数を選択して、「アクションの設定」をクリックする。
- 「ルールの作成」画面に戻るので、下部にある「ルールの作成」ボタンをクリックする。
- 「ルールは正常に作成されました。」と表示されればOK。
Amazon自動注文ボタンのAWS側処理の動作確認
以下に、ボタンクリック⇒自動購入スクリプトが実行されることを確認する手順をまとめました。
- ボタンをクリックする。
- 「AWS CloudWatch」にアクセスする。
- 左のメニューから[ログ > ロググループ]を選択し、「ログストリーム」タブを開く。
- ボタンをクリックしたくらいの時刻のログをクリックする。
- 自動購入スクリプトのログが表示される。
正常終了していれば、ログ出力は以下のようになっているはずです。
Function Logs
START RequestId: 7248ccbf-2b44-473f-b9fc-94a7d3ca1ca2 Version: $LATEST
2021/12/12 15:13:19 : ### START autoPurcaser ###
2021/12/12 15:13:19 : ### Get Secret Param from SSM ###
2021/12/12 15:13:20 : ### Open Top Page ###
2021/12/12 15:13:37 : ### Login ###
2021/12/12 15:13:41 : ID:nav-link-accountList, num:1
2021/12/12 15:13:52 : ID:ap_email, num:1
2021/12/12 15:13:56 : ID:continue, num:2
2021/12/12 15:14:00 : ID:ap_password, num:1
2021/12/12 15:14:02 : ID:signInSubmit, num:1
2021/12/12 15:14:15 : Logged in now.
2021/12/12 15:14:15 : ### Open Item Page ###
2021/12/12 15:14:33 : ### Add To Cart ###
2021/12/12 15:14:35 : ID:add-to-cart-button, num:1
2021/12/12 15:14:44 : ### Proceed To Cashier ###
2021/12/12 15:14:51 : ID:sc-buy-box-ptc-button, num:1
2021/12/12 15:15:18 : ### Close Browser ###
2021/12/12 15:15:21 : ### FINISH autoPurcaser ###
END RequestId: 7248ccbf-2b44-473f-b9fc-94a7d3ca1ca2
ご自分のAmazonアカウントにログインすると、カードの中に[Amazon限定ブランド] キリン LAKURASHI アルカリイオンの水 PET (2L×9本)」が入っているはずです!
購入処理部分を有効化する
自動購入スクリプトが問題ないことを確認したら、サンプルコートの購入内容の確認
の部分を有効化します。
有効化は、購入内容の確認
の処理の前後に入っている'''
を削除すればよいです。
以上!
コメント