상테크를 하기 위해 상품권을 대량으로 구매하면, 상품권이 수십장이 되기 때문에, 이걸 충전하고 현금화 하는 과정이 상당히 많은 시간이 소요된다. 특히, 일일이 수작업으로 입력을 한다 했을 때, 오타도 있을 수 있기에 비교 대조해가며 입력해야 하는데, 눈 까지 침침해지면서 정말이지 곤욕이다. 이런 단순하고 반복적인 일은 컴퓨터가 정말 정확하게 잘 처리한다. 파이썬으로 북앤라이프 상품권 번호 자동입력 코드를 간단하게 개발해봤다.
북앤라이프 상품권 충전 자동입력 코드는 두 부분으로 구성된다. 하나는 SMS에서 백업한 XML 파일에서 상품권번호와 인증번호를 추출하는 부분이고, 다른 하나는 북앤라이프 웹사이트에서 자동충전을 도와주는 부분이다.
[2024년 1월 5일 현재 잘 작동]
1. XML 파일에서 상품권번호와 인증번호 추출
먼저, 백업은 구글 안드로이드 기준 SMS Backup & Restore 앱을 이용해 문자 백업을 진행했다.
XML 파일에서 상품권번호와 인증번호 추출 파이썬 코드
import xml.etree.ElementTree as ET
# XML 파일 경로 지정
xml_file = 'giftcard/booknlife/sms.xml'
def extract_info(xml_file):
try:
# XML 파일 파싱
doc = ET.parse(xml_file)
root = doc.getroot()
mms = root.findall("mms")
for i, m in enumerate(mms, 1):
parts = m.find("parts") # 각 'mms' 요소에 대한 'parts' 찾기 (하나만 가정)
if parts is not None:
for part in parts.findall("part"):
# 'part' 요소가 텍스트인 경우만 처리
if part.attrib.get("ct") == "text/plain":
text = part.attrib.get('text')
if text:
lines = text.split('\n')
pin_n, pin_4 = "", ""
for line in lines:
# 상품권번호 추출
if '상품권번호' in line:
pin_n = line.split(': ')[1].strip()
# 인증번호 추출 (4자리 숫자만)
elif '인증번호' in line and len(line.split(': ')[1].strip()) == 4:
pin_4 = line.split(': ')[1].strip()
# 상품권번호와 인증번호가 모두 추출된 경우 출력
if pin_n and pin_4:
print(f"상품권번호: {pin_n} 인증번호: {pin_4}")
# 5개의 'mms'를 처리할 때마다 구분선 출력
if i % 5 == 0:
print('------------------------------')
# XML 파싱 오류 처리
except ET.ParseError as e:
print(f"XML 파싱 오류: {e}")
# 기타 예외 처리
except Exception as e:
print(f"오류 발생: {e}")
# XML 파일에서 정보 추출
extract_info(xml_file)
2. 북앤라이프 웹사이트 자동 충전
pyautogui와 keyboard 라이브러리를 이용해, 이른바 오토마우스 형식으로 프로그램을 개발했다.
북앤라이프 웹사이트 자동 충전 파이썬 코드
import pyautogui
import time
import re
import keyboard
# 상품권번호와 인증번호 최대 20개까지 동시 입력
raw_data = """
상품권번호: 9580613396817252 인증번호: 6264
상품권번호: 6065284996332898 인증번호: 5537
상품권번호: 2957902157690847 인증번호: 4316
상품권번호: 8659512797736897 인증번호: 7812
상품권번호: 3206577542285569 인증번호: 3936
상품권번호: 0013303130092941 인증번호: 1082
상품권번호: 9762527603357423 인증번호: 9860
상품권번호: 5997636008268112 인증번호: 8757
상품권번호: 8214934972978261 인증번호: 3536
상품권번호: 8573994843415960 인증번호: 7571
상품권번호: 1904959876058790 인증번호: 3426
상품권번호: 5248341821690276 인증번호: 1388
상품권번호: 7200462883741703 인증번호: 8117
상품권번호: 4517760231248127 인증번호: 8567
상품권번호: 5798544236263175 인증번호: 4726
상품권번호: 7872786798310634 인증번호: 2784
상품권번호: 2392508491724485 인증번호: 0374
상품권번호: 1657614429252740 인증번호: 3799
상품권번호: 7461772017854881 인증번호: 7330
상품권번호: 3305049519145471 인증번호: 6736
"""
# 정규 표현식을 사용하여 상품권번호와 인증번호 추출
vouchers = []
for line in raw_data.strip().split('\n'):
match = re.search(r'상품권번호: (\d+) 인증번호: (\d+)', line)
if match:
pin, auth = match.groups()
vouchers.append({"pin": pin, "auth": auth})
running = False # 스크립트 실행 상태
def input_vouchers():
global running
running = True
for voucher in vouchers:
if not running:
break
input_voucher(voucher["pin"], voucher["auth"])
time.sleep(1) # 각 입력 사이에 약간의 지연
print("자동 입력 완료 또는 중지됨")
running = False
def input_voucher(pin, auth):
time.sleep(1) # 다음 입력 전에 짧은 지연
# 상품권번호를 두 부분으로 나누어 입력
part1, part2 = pin[:8], pin[8:]
pyautogui.write(part1, interval=0.1) # 첫 번째 부분 입력
time.sleep(0.5) # 짧은 지연
pyautogui.write(part2, interval=0.1) # 두 번째 부분 입력
pyautogui.write(auth, interval=0.1) # 인증번호 입력
time.sleep(0.5) # 다음 입력 전에 짧은 지연
pyautogui.press('tab') # 필요하면 다음 필드로 이동
def on_activate():
global running
if not running:
print("자동 입력 시작")
input_vouchers()
else:
print("자동 입력 중지")
running = False
# 단축키 설정 (Ctrl + F12)
keyboard.add_hotkey('ctrl+f1', on_activate)
# 프로그램 종료를 위한 메시지
print("Ctrl + F1를 눌러 자동 입력을 시작/중지하세요. 스크립트를 종료하려면 Ctrl + C를 누르세요.")
# 이벤트 루프
keyboard.wait('ctrl+c')
앱을 실행 한 후, 상품권번호 입력하는 첫 번째 칸에 마우스를 한 번 클릭해, 커서가 깜빡이면 Ctrl키와 F1키를 동시에 누르면 상품권번호와 인증번호를 자동으로 입력한다.