본문 바로가기
Knowledge/IT, 인터넷

Playwright를 활용한 로또 자동 구매 프로그램 만들기-1

by MoSeoPAPA 2025. 3. 10.
반응형

Playwright를 활용한 로또 자동 구매 프로그램 만들기

1. 로또 자동 구매 프로그램을 만들게 된 이유

로또를 매주 구매해야겠다고 생각은 하지만, 막상 바쁘거나 깜빡 잊어버려서 구매하지 못하는 경우가 많다. 특히 당첨 번호를 맞추는 것보다 꾸준히 구매하는 것이 더 어렵다는 것을 느끼곤 했다. 매번 직접 구매하는 수고로움 없이, 자동으로 로또를 사줄 수 있는 프로그램이 있다면 얼마나 편할까? 이런 생각에서 출발하여 로또 자동 구매 프로그램을 만들게 되었다.

매번 수동으로 구매하는 불편함

매주 로또를 구매하는 과정은 간단해 보이지만, 정해진 시간에 맞춰 구매하는 것은 생각보다 번거롭다. 특히, 잊어버리고 지나치면 구매 기회를 놓치게 되며, 바쁜 일정 속에서 꾸준히 구매하는 것이 쉽지 않다.

Playwright란 무엇인가?

Playwright는 Microsoft에서 개발한 오픈 소스 웹 자동화 프레임워크로, 다양한 웹 브라우저(Chromium, Firefox, WebKit)를 자동으로 제어할 수 있도록 도와준다. Selenium과 유사하지만, 더 빠르고 안정적인 자동화 환경을 제공한다.

2. Playwright 소개 및 환경 설정

Playwright에 대한 개념 설명 (Selenium과 비교)

웹 자동화 도구로 널리 사용되는 Selenium과 비교했을 때, Playwright는 더 나은 성능과 다양한 기능을 제공한다. Selenium은 브라우저 자동화의 대표적인 도구이지만, 실행 속도가 느리고 브라우저 호환성 문제가 자주 발생하는 단점이 있다. 반면, Playwright는 보다 빠르고 직관적인 API를 제공하며, 최신 웹 기술과도 잘 호환된다.

Playwright 설치 방법

pip install playwright
playwright install

이제 Playwright를 활용한 웹 자동화가 가능하다.

웹 브라우저 자동화를 위한 기본 개념 설명

  • 브라우저 실행 및 페이지 열기: playwright.chromium.launch() 를 사용하여 브라우저 실행 후 page.goto(URL)로 이동
  • 요소 선택 및 조작: page.fill() 로 입력, page.click() 로 버튼 클릭
  • 스크린샷 및 디버깅: page.screenshot()을 활용하여 디버깅 가능

3. 로또 자동 구매 프로그램 개요

프로그램이 수행하는 기능 정리

  • 로그인 - 로또 사이트에 로그인하여 사용자 계정 정보를 불러온다.
  • 잔액 확인 - 현재 계정의 잔액을 가져와 로또 구매 가능 여부를 확인한다.
  • 자동 번호 생성 - 랜덤으로 로또 번호 6개를 선택하여 구매할 번호를 생성한다.
  • 로또 구매 - 생성된 번호를 바탕으로 자동으로 로또를 구매한다.
  • 최종 확인 및 창 닫기 - 구매가 완료되면 확인 메시지를 출력하고 브라우저를 종료한다.

4. 핵심 코드 분석

4.1 로그인 기능 구현

로그인 페이지로 이동하여 ID와 비밀번호를 입력하고 로그인 버튼을 클릭한다.

page.goto("https://dhlottery.co.kr/user.do?method=login")
page.fill("[placeholder='아이디']", USER_ID)
page.fill("[placeholder='비밀번호']", USER_PW)
page.press("form[name='jform'] >> text=로그인", "Enter")

4.2 잔액 확인 기능 구현

현재 계정의 잔액을 가져와 로또 구매 가능 여부를 확인한다.

balance = page.locator(".top_menu .information .money strong").text_content()

4.3 로또 번호 자동 생성

랜덤으로 6개의 로또 번호를 생성한다.

import random
lotto_numbers = sorted(random.sample(range(1, 46), 6))

4.4 로또 구매 기능

자동 생성된 번호를 선택하고 구매 버튼을 클릭한다.

for num in lotto_numbers:
    selector = f"#checkNumGroup > label:nth-child({2 * num + 1})"
    page.click(selector)
page.click("input:has-text('구매하기')")

이제 실행 및 테스트 방법에 대해 살펴보자.

반응형

댓글