본문 바로가기

코딩/파이썬(Python)

[파이썬] 파이썬으로 동행복권 로또 자동 구매 스크립트

반응형

파이썬으로 동행복권 로또 자동구매하기

올해 새해 다짐 중 하나로 로또를 매주 5천원씩 구매하는 것을 정했다.

실낱같은 확률이지만, 매주 가벼운 기대와 즐거움을 주는 것이 나쁘지 않은 듯해서 시도해보기로 하고, 이 참에 파이썬을 통해 동행복권 웹페이지에서 로또를 자동 구매하는 것을 만들어봤다.

(그리고 우선 동행복권 사이트에서 1년치 구매할 금액인 30만원을 충전해두었다.)

 

Playwright 라이브러리 설치

이 전에는 selenium을 주로 사용했지만, 최근에는 microsoft에서 만든 playwright 라이브러리가 사용하기가 간편하고 빠른 듯 해서 이번에는 playwright로 코드를 작성해보았다.

 

playwright는 pip로 설치가 가능하고 설치후 install 커맨드를 입력해줘야 한다.

 

pip install playwright
playwright install

 

Playwright로 액션 녹화

playwright의 최대 장점 중 하나인 record 기능을 쓰기 위해서는 아래 명령어를 입력하면 된다.

그러면 wikipedia.org 웹페이지가 열리게 되고 사용자가 입력한 액션을 python이나 javascript 등으로 알아서 작성해준다. 그 뒤 원하는 부분을 수정해주면 빠르게 코드 작성이 가능하다.

 

playwright codegen wikipedia.org

 

로또 구매 코드

아래는 동행복권에서 로또를 구매하는 코드이다. 간단하기 때문에 별도 설명없어도 주석을 참고하면 될듯하다.

나는 스케쥴러에 매주 일요일 오후5시에 구매하도록 설정을 해두었다.

 

from playwright.sync_api import Playwright, sync_playwright
import time

# 동행복권 아이디와 패스워드를 설정
USER_ID = '유저ID'
USER_PW = '유저PW'

# 구매 개수를 설정
COUNT = 5

def run(playwright: Playwright) -> None:

    # chrome 브라우저를 실행
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()

    # Open new page
    page = context.new_page()

    # Go to https://dhlottery.co.kr/user.do?method=login
    page.goto("https://dhlottery.co.kr/user.do?method=login")

    # Click [placeholder="아이디"]
    page.click("[placeholder=\"아이디\"]")

    # Fill [placeholder="아이디"]
    page.fill("[placeholder=\"아이디\"]", USER_ID)

    # Press Tab
    page.press("[placeholder=\"아이디\"]", "Tab")

    # Fill [placeholder="비밀번호"]
    page.fill("[placeholder=\"비밀번호\"]", USER_PW)

    # Press Tab
    page.press("[placeholder=\"비밀번호\"]", "Tab")

    # Press Enter
    # with page.expect_navigation(url="https://ol.dhlottery.co.kr/olotto/game/game645.do"):
    with page.expect_navigation():
        page.press("form[name=\"jform\"] >> text=로그인", "Enter")

    page.goto(url="https://ol.dhlottery.co.kr/olotto/game/game645.do")

    # ---------------------------------------------
    # 사용자 지정 번호 입력 
    # 여기서는 2와 24를 입력하고 나머지는 자동선택함
    # ---------------------------------------------

    # Click label:has-text("2")
    page.click("label:has-text(\"2\")")

    # Click label:has-text("24")
    page.click("label:has-text(\"24\")")

    # 나머지 숫자는 자동 선택함
    # Click text=자동선택
    page.click("text=자동선택")

    # 구매할 개수를 선택
    # Select 5
    page.select_option("select", str(COUNT))

    # Click text=확인
    page.click("text=확인")

    # Click input:has-text("구매하기")
    page.click("input:has-text(\"구매하기\")")

    time.sleep(2)
    # Click text=확인 취소 >> input[type="button"]   
    page.click("text=확인 취소 >> input[type=\"button\"]")

    # Click input[name="closeLayer"]
    page.click("input[name=\"closeLayer\"]")
    # assert page.url == "https://el.dhlottery.co.kr/game/TotalGame.jsp?LottoId=LO40"

    # ---------------------
    context.close()
    browser.close()


with sync_playwright() as playwright:
    run(playwright)
반응형