북앤라이프 상품권 충전 자동입력 파이썬 코드

상테크를 하기 위해 상품권을 대량으로 구매하면, 상품권이 수십장이 되기 때문에, 이걸 충전하고 현금화 하는 과정이 상당히 많은 시간이 소요된다. 특히, 일일이 수작업으로 입력을 한다 했을 때, 오타도 있을 수 있기에 비교 대조해가며 입력해야 하는데, 눈 까지 침침해지면서 정말이지 곤욕이다. 이런 단순하고 반복적인 일은 컴퓨터가 정말 정확하게 잘 처리한다. 파이썬으로 북앤라이프 상품권 번호 자동입력 코드를 간단하게 개발해봤다.

북앤라이프 상품권 충전 자동입력 코드는 두 부분으로 구성된다. 하나는 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키를 동시에 누르면 상품권번호와 인증번호를 자동으로 입력한다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다