반응형
과거 20년전에나 볼 수 있던 신용카드의 혜택을 볼 수 있어 너무 소중한 더모어 신한 카드.
각종 결제 신공을 도입하고 있던 와중, 아마존 적금이라는 글을 발견하여 저도 아마존 적금을 시작했습니다.
비록 미국 아마존이라 배송비도 비싸고 언제 어떻게 쓸 수 있을지 잘 모르겠어서 매일매일 하지는 않고있고
생각날때마다 한번씩 하고 있습니다.
그래도 환율 찾아보고 금액 넣는게 꽤나 귀찮은 짓이라 원클릭에 끝내고 싶어졌습니다.
Python 코드입니다.
config_data의 메일주소, 비밀번호, 메인 결제 수단으로 등록된 카드의 카드번호를 입력하시면 됩니다.
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
import os, sys
## python -m PyInstaller -F Check_currency.py --collect-data selenium --collect-data certifi
config_data = {
"amazon_id": "계정메일주소",
"amazon_pwd": "계정비밀번호",
"cardnumbers": "카드번호",
# 더모어 계산기
"url_check": "https://www.thecashback.kr/exchangerate.php",
"xpaths_check": '//*[@id="c7"]',
# 여기부터 amazon
"url_buy": "https://www.amazon.com/gp/product/B086KKT3RX",
"xpaths_buy_amount": '//*[@id="gcui-asv-reload-form-custom-amount"]',
"xpaths_buy_button": '//*[@id="gcui-asv-reload-buynow-button"]/span/input',
# passwd(login check)
"xpaths_login_mail": '//*[@id="ap_email"]',
"xpaths_login_mail_btn": '//*[@id="continue"]',
"xpaths_login_psswd": '//*[@id="ap_password"]',
"xpaths_login_psswd_btn": '//*[@id="signInSubmit"]',
# order page - verify card?
"xpaths_paymethod": '//*[@type="radio"]',
"xpaths_paymethod_cardnum": "",
"xpaths_paymethod_cardnum_btn": '//*[@aria-label="Verify card"]',
"xpaths_paymethod_btn": '//*[@name="ppw-widgetEvent:SetPaymentPlanSelectContinueEvent"]',
"xpaths_buy_order": '//*[@name="placeYourOrder1"]',
"xpaths_buy_check": '//*[@id="widget-purchaseConfirmationStatus"]/div/h4/div/div/h4',
# text = Order placed, thanks!
}
config_data["xpaths_paymethod_cardnum"] = (
'//*[@placeholder="ending in ' + config_data["cardnumbers"][-4:] + '"]'
)
def set_chrome_driver():
try:
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-logging"])
options.add_argument("lang=ko_KR")
if not os.path.isfile("debug"):
options.add_argument("headless")
os.environ["WDM_LOG_LEVEL"] = "0"
else:
try:
del os.environ["WDM_LOG_LEVEL"]
except:
None
driver = webdriver.Chrome(
service=Service(ChromeDriverManager().install()), options=options
)
driver.delete_all_cookies()
driver.implicitly_wait(5)
return driver
except Exception as e:
print(e)
return False
def check_today(config_data, driver):
try:
driver.get(config_data["url_check"])
a = driver.find_element(By.XPATH, config_data["xpaths_check"]).text
a = float(a.replace("$", ""))
return a
except:
return False
def Amazon_1_buybalance(config_data, driver, today_value):
try:
driver.get(config_data["url_buy"])
driver.implicitly_wait(10)
print("Enter $" + str(today_value))
driver.find_element(By.XPATH, config_data["xpaths_buy_amount"]).send_keys(
str(today_value)
)
print("Press BUY")
driver.find_element(By.XPATH, config_data["xpaths_buy_button"]).click()
driver.implicitly_wait(10)
return True
except:
return False
def Amazon_login(config_data, driver, input_mail):
try:
print("Enter E-mail")
input_mail.send_keys(config_data["amazon_id"])
print("Press NEXT")
driver.find_element(By.XPATH, config_data["xpaths_login_mail_btn"]).click()
driver.implicitly_wait(10)
print("Enter password")
driver.find_element(By.XPATH, config_data["xpaths_login_psswd"]).send_keys(
config_data["amazon_pwd"]
)
print("Press Login")
driver.find_element(By.XPATH, config_data["xpaths_login_psswd_btn"]).click()
driver.implicitly_wait(10)
return True
except:
return False
def Amazon_2_logincheck(config_data, driver):
try:
input_mail = driver.find_element(By.XPATH, config_data["xpaths_login_mail"])
print("Login required.")
except:
print("Login page skip.")
return True
return Amazon_login(config_data, driver, input_mail)
def Amazon_paycheck(config_data, driver, paycheck):
try:
print("Press card radio box")
paycheck.click()
driver.implicitly_wait(10)
print("Enter card numbers")
driver.find_element(
By.XPATH, config_data["xpaths_paymethod_cardnum"]
).send_keys(config_data["cardnumbers"])
print("Press Verify button")
driver.find_element(
By.XPATH, config_data["xpaths_paymethod_cardnum_btn"]
).click()
driver.implicitly_wait(10)
driver.find_element(By.XPATH, config_data["xpaths_paymethod_btn"]).click()
driver.implicitly_wait(10)
return True
except:
return False
def Amazon_3_Paymethodcheck(config_data, driver):
try:
paycheck = driver.find_element(By.XPATH, config_data["xpaths_paymethod"])
print("Payment method check required.")
except:
print("Payment method not-checking.")
return True
return Amazon_paycheck(config_data, driver, paycheck)
if __name__ == "__main__":
driver = set_chrome_driver()
if not driver:
print("Driver Initialize Fail")
sys.exit()
today_value = check_today(config_data, driver)
if not today_value:
print("Check today value Failed")
sys.exit()
print(today_value)
try_count = 1
while try_count <= 5:
try_count += 1
status = Amazon_1_buybalance(config_data, driver, today_value)
status = Amazon_2_logincheck(config_data, driver)
status = Amazon_3_Paymethodcheck(config_data, driver)
try:
final_button = driver.find_element(
By.XPATH, config_data["xpaths_buy_order"]
)
final_button.click()
print("Order submit")
except:
print("Order failed")
continue
try:
result = driver.find_element(By.XPATH, config_data["xpaths_buy_check"]).text
except:
print("Order check failed")
if "Order placed" in result:
print("Order success!")
break
else:
print("Order rejected??? check please")
input()
break
실행하는 데 필요한 requirment는 첨부로 올렸습니다.
pip install -r requirements.txt
로 필요한 plug-in들을 설치하면 돌릴 수 있고,
python -m PyInstaller -F Check_currency.py --collect-data selenium --collect-data certifi
명령어를 통해 실행 파일로 만들 수 있습니다.
수행 결과를 알기 위해 cmd 창이 뜨도록 되어있고,
실행하는 폴더에 debug 라는 공파일이 있는 경우 브라우저가 보이도록 되어있어 과정을 확인할 수 있습니다.
또한 debug 파일이 있어 브라우저가 보이는 경우 결제 실패/완료 후 브라우저가 꺼지지 않도록 되어있습니다.
반응형
'PC > Programming' 카테고리의 다른 글
Anno1800 Autosave file이 너무 많다. (0) | 2022.05.12 |
---|---|
Amazon Glacier 삭제가 힘드니 python으로... (0) | 2022.03.19 |
[Power automate desktop] 지정된 시각에 작동하도록 flow 짜기 (0) | 2021.03.14 |
[Power automate desktop] 사용 후기 (0) | 2021.03.13 |
[Python] MD5 hash 값 출력 프로그램 (0) | 2020.11.24 |
댓글