· 톺아보기

PC/모바일

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

MakingAlpha · · 수정

조회 37,759 · 공감 49 · 댓글 36

출처 : https://bizanalytics.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%8F%99%ED%96%89%EB%B3%B5%EA%B6%8C-%EB%A1%9C%EB%98%90-%EC%9E%90%EB%8F%99-%EA%B5%AC%EB%A7%A4-%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8


안녕하세요. 2022년 새해복 많이 받으시기 바랍니다.


개인적으로 작은 재미가 하나 있었으면 해서 매주 로또 구매하는 것을 올해의 작은 다짐 중 하나로 정했습니다. 

그리고  생각 난 김에 귀차니즘을 해결하기 위해서 코드로 짜서 스케줄러에 등록을 해놨습니다.


파이썬+playwright로 작성했고 코드가 간단해서 주석을 참고하시면 될것 같습니다.

아래 코드가 보기 불편하신 경우 블로그를 참고하시기 바랍니다.





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)




참고로 '김비서로또샀나 '라는 무료 프로그램이 있는데, 구매가 가능한 시간에 알아서 구매를 해주는 프로그램 같습니다만, 번호를 지정할 수는 없고, 자동구매만 지원하는 듯 합니다.


올 한해 좋은일만 가득하시길 바랍니다.


출처 : https://bizanalytics.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%8F%99%ED%96%89%EB%B3%B5%EA%B6%8C-%EB%A1%9C%EB%98%90-%EC%9E%90%EB%8F%99-%EA%B5%AC%EB%A7%A4-%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8

댓글 36

  1. byelife · · 공감 2
    selenium 비슷한건가 보네요! 감사합니다
  2. MakingAlpha ·
    @byelife님 네 selenium과 비슷하고 사용하기에는 좀더 편합니다.
  3. 만두다섯개 · · 공감 1
    우와 멋지네요 ^^
  4. 평온나날 · · 공감 1
    오 감사합니다. ㅎㅎ
  5. realg · · 공감 2
    selenium 만 알고 있었는데 덕분에 playwright 를 새롭게 알게됐네요. 감사합니다.
  6. MakingAlpha ·
    @realg님 네~ ms가 밀어주는 라이브러리입니다. 성능도 훌륭합니다.
  7. 띵땅띵땅 ·
    비전문가인데요 혹시 여러대의 PC에 동시에 특정 키보드값 날려주는거 파이썬으로 짜기에 어려울까요?
    요즘 배치파일등에 관심이 많아서 이것저것 검색해보곤 있는데 아무래도 비전문가라 이것저것 궁금한게 많네요 ㅎㅎ;;

    제가 하고자하는건 고정IP를 이용해 내부네트웍 안에서 동시에 특정 키보드값을 날려주는건데 (ex. A,B,C 등)
    구글링정도로 비전문가가 해낼 수 있을까요 ??
  8. MakingAlpha ·
    @띵땅띵땅님 음.. 원격데스크탑 등 특정환경에서는 가능하지만 매우 불편합니다.
  9. 삼혼4 · · 공감 1
    와 대박..
  10. 뿌뿌맘 · · 공감 1
    덕분에 playwright라는 걸 알게되었네요.
    예제코드에서 5개 모두 '2', '24', '자동'인가요?
  11. MakingAlpha ·
    @뿌뿌맘님 네 맞습니다.
  12. 무지개우산 · · 공감 1
    selenium으로 보통 코드 작성했는데 playwritght라는 모듈은 처음 보네요. 훨씬 코드가 간결하네요.
  13. MartinQ · · 공감 2
    playwright 좋네요!
    글 감사합니다 :)
  14. raindraw · · 공감 1
    오 셀레니움보다 편해 보이네요. 알려주셔서 감사합니다.
  15. 겁벅 · · 공감 1
    이런게 있었군요 감사합니다
  16. 엄지척 ·
    컴맹은 어떻게 써야 하는지...봐도 모르겠네요. 뭘 설치 해야 하는건가요? ^^;;;;
  17. MakingAlpha ·
    @엄지척님 개발이 어려우시면 위에 말씀드린 프로그램을 사용하시는게 편하실 듯 해요!
    구글에 김비서로또샀나 검색하시면 됩니다
  18. ShadowGallery ·
    playwright 알아갑니다. 감사합니다.
  19. Damper ·
    진짜 직관적이네요 ㅎㅎ
  20. Saper ·
    리눅스에서는 작동이 불가능한가죠?
  21. MakingAlpha ·
    @Saper님 리눅스에서도 가능합니다. 다만 headless 환경에서도 동작은 하나 개발할 때는 gui 환경에서 하시는게 나을 거에요
  22. 에두아르 ·
    와우! 좋네요~ 감사합니다. 궁금한게 있는데... 로그인 명령은 한번만 실행하고 그 이후 명령어를 반복할 수 있을까요?
  23. MakingAlpha ·
    @에두아르님 네 조금만 수정하시면 될것 같습니다. For loop 를 통해서 처리하시면 됩니다.
  24. 가을남 ·
    감사합니다.
    playwright 배워갑니다.
  25. 오맹달이 ·
    잘 보았습니다. go 에서 똑같은 구현으로 해보는데 로그인은 되었는데 비정상적인 방법으로 접속하였습니다. 라는 팝업이 뜨네요. 혹시나 조언이 가능하신가 하여 댓글을 달아봅니다
  26. MakingAlpha · · 공감 1
    @오맹달이님 golang은 테스트를 안해봐서 잘 모르겠네요 ㅜ
  27. 오맹달이 ·
    @MakingAlpha님 감사합니다. 좀더 파봐야겠네요. ㅎㅎ
  28. 우리아이유 · · 공감 1
    신기하네요. 따라 해봐야겠습니다.

    블로그를 보다보니
    가사도우미의 절도, 현장 검거 그리고 유죄 확정까지 1편이 있던데요.
    그 이후가 궁금합니다.
  29. MakingAlpha ·
    @우리아이유님 안그래도 2편 요구가 많아서 곧 써보겠습니다 ㅠ
  30. 도도한도도새 ·
    @MakingAlpha님 정말 기대 됩니다!
  31. rkdvy97 ·
    우와...
  32. 심루까 ·
    신기하네요... playwright 이거 써먹을데가 있겠네요 감사합니다
  33. 메두사 ·
    댓글 이미지
    올려주신 글 보고 따라만들어봤는데....
    비정상적인 방법으로 접속했다고 에러가 나네요 ㅡㅜ
  34. 오직간판 ·
    파이썬을 모르는 사용자를 위하여 프로그램으로 내놓으시면 좋겟습니다
  35. 쿠에에엑 ·
    혹 비정상 접속 에러 나시는분은

    43라인(page.goto(url="https://ol.dhlottery.co.kr/olotto/game/game645.do") 뒷줄에

    page.locator("#popupLayerAlert").get_by_role("button", name="확인").click()

    넣어주심 됩니다.

    확인 자동 눌러주기 ㅋㅋㅋ
  36. 야놀쟈 ·
    오와 , 저도 한번 따라해볼게요. 감사합니다.

팁과강좌 최근 글

팁과강좌 목록 더 보기