* 최근 매크로로 인한 피해가 많아지고 있어 불법적인 사용을 할 경우 법적 처벌을 받을 수 있습니다.
서문
요즘 테니스를 즐기는 분들이 많아지면서 테니스장 예약이 큰 이슈로 부상하고 있습니다!
하지만 인기 있는 테니스장은 인기있는 시간에는 예약하기는 불가능에 가깝죠

그래서 사람들은 이러한 문제를 해결하기 위해 파이썬을 활용한 자동화된 매크로 프로그램을 사용하고 있습니다.
문제는 이러한 매크로 프로그램이 파이썬으로 구현하면 매우 쉽게 만들 수 있다는 겁니다.
(기술의 비대칭성을 해결하기 위해 이런 것들을 막는 조치가 필요할 것 같습니다.)
이번 포스트에서는 테니스장 예약을 자동화하는 방법과 함께 실제 사례를 살펴보겠습니다.
본문
✅ 챗GPT/머신러닝/자동화 무료 세미나 진행중!
https://m.cafe.naver.com/chatgptcomm/166
[앵콜 무료 세미나] 챗GPT/머신러닝/자동화 부업 활용사례 및 미래 전망
(키홈의 무료세미나 참여 후 어떤것들을 얻으셨는지, 댓글을 참고해주세요) 신청을 희망하시는 분들은 아래 배너를 클릭해주세요.👇👇 신청을 희망하시는 분들은 아래 배너를 클릭...
cafe.naver.com
# 필요한 라이브러리 설치하기
테니스장 예약을 자동화하기 위해 Selenium과 Beautiful Soup 같은 파이썬 라이브러리를 사용합니다.
Selenium은 웹 브라우저를 제어하고 웹 요소에 접근하는 기능을 제공하며, Beautiful Soup은 웹 페이지의 HTML 구조를 파싱하는 데 사용됩니다.
from selenium import webdriver
from bs4 import BeautifulSoup
from urllib.parse import quote_plus
import pandas as pd
import numpy as np
from urllib import request
import time
from IPython.display import clear_output
# 웹 드라이버 설정
Selenium을 사용하기 위해 해당 웹 브라우저에 맞는 웹 드라이버를 다운로드하고 설정해야 합니다.
대부분의 경우 Chrome 웹 드라이버를 사용하며, 버전에 맞게 설치해야 합니다.
저의 경우는 chromedriver를 사용하지만, 내부에 설치된 chome창을 불러와서 활용해보았습니다.
* 실행전에 터미널에 아래 코드를 실행시켜야 합니다.
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222 --user-data-dir="~/ChromeProfile"
import random
# TODO random user_agents
user_agents = [
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36',
]
user_agent_index = random.choice(list(range(0, len(user_agents), 1)))
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('headless')
chrome_options.add_argument('window-size=1920x1080')
chrome_options.add_argument('disable-gpu')
chrome_options.add_argument(user_agents[user_agent_index])
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_driver = '/Users/kihong13/python/banksalad-laboratory/laboratory/eda/kihongryoo/crawling/chromedriver' ## 크롬 드라이버 위치
driver = webdriver.Chrome(chrome_driver, options=chrome_options)
driver.implicitly_wait(3) ## 연결 후 3초간 기다리기
# 로그인 과정 자동화
예약을 위해 테니스장 예약 시스템에 로그인해야 합니다.
Selenium을 사용하여 로그인 페이지에 접근하고 필요한 정보를 입력하여 자동으로 로그인하는 기능을 구현합니다.
# 예약 가능한 시간대 확인
저희는 내곡 테니스장의 1번 코트에서만 자동화를 진행해볼 예정입니다.
아래 코드를 사용해 해당 내곡 테니스장으로 접속해줍니다!
✅ 챗GPT/머신러닝/자동화 무료 세미나 진행중!
https://m.cafe.naver.com/chatgptcomm/166
[앵콜 무료 세미나] 챗GPT/머신러닝/자동화 부업 활용사례 및 미래 전망
(키홈의 무료세미나 참여 후 어떤것들을 얻으셨는지, 댓글을 참고해주세요) 신청을 희망하시는 분들은 아래 배너를 클릭해주세요.👇👇 신청을 희망하시는 분들은 아래 배너를 클릭...
cafe.naver.com
driver.get('https://booking.naver.com/booking/10/bizes/217811/items/4348531')
저는 가능한 날짜 범위인 5/26(금) ~ 5/31(수)까지로 지정하였으며, 시간범위는 5:00시부터 8:00시까지로 지정해놓았습니다!
python에서 해당 날짜 범위를 설정해주고, 시간 범위를 정해줍니다.
여기서는 따로 로직을 넣지는 않았고 날짜들의 xpath들을 그대로 넣어두었습니다.
day_list = [
"/html/body/app/div[2]/div[2]/bk-freetime/div[2]/div[2]/div[1]/div/bk-select-schedule/div[1]/table/tbody[1]/tr[4]/td[6]/a"
# 26일
, "/html/body/app/div[2]/div[2]/bk-freetime/div[2]/div[2]/div[1]/div/bk-select-schedule/div[1]/table/tbody[1]/tr[4]/td[7]/a"
# 27일
, "/html/body/app/div[2]/div[2]/bk-freetime/div[2]/div[2]/div[1]/div/bk-select-schedule/div[1]/table/tbody[1]/tr[5]/td[1]/a"
# 28일
, "/html/body/app/div[2]/div[2]/bk-freetime/div[2]/div[2]/div[1]/div/bk-select-schedule/div[1]/table/tbody[1]/tr[5]/td[2]/a"
# 29일
, "/html/body/app/div[2]/div[2]/bk-freetime/div[2]/div[2]/div[1]/div/bk-select-schedule/div[1]/table/tbody[1]/tr[5]/td[3]/a"
# 30일
, "/html/body/app/div[2]/div[2]/bk-freetime/div[2]/div[2]/div[1]/div/bk-select-schedule/div[1]/table/tbody[1]/tr[5]/td[4]/a"]
# 31일
hour_list = [
"/html/body/app/div[2]/div[2]/bk-freetime/div[2]/bk-select-time-schedule/div/div[2]/div[2]/ul/li[6]/a"
# 5시
, "/html/body/app/div[2]/div[2]/bk-freetime/div[2]/bk-select-time-schedule/div/div[2]/div[2]/ul/li[7]/a"
# 6시
, "/html/body/app/div[2]/div[2]/bk-freetime/div[2]/bk-select-time-schedule/div/div[2]/div[2]/ul/li[8]/a"
# 7시
, "/html/body/app/div[2]/div[2]/bk-freetime/div[2]/bk-select-time-schedule/div/div[2]/div[2]/ul/li[9]/a"
# 8시
]
다음으로 python 매크로 프로그램은 지정한 시간을 돌아가다가 클릭이 가능해지면 클릭하고 예약시간을 선택해줍니다.
예약시간이 선택이 되면 결제창으로 넘어가서 결제가 진행되게 됩니다.
여기서 결제를 위해서는 네이버 적립금이 있어야 진행되므로 사전에 채워놓아 주셔야 합니다!
clear_output(wait=True)
for xpath in temp_list:
elem = driver.find_element("xpath", xpath)
day = elem.text.split('\n')[0].strip()
elem.click()
# 날짜 클릭
for hour_xpath in hour_list:
elem = driver.find_element("xpath", hour_xpath)
hour = elem.text
# 시간 정보 취득
✅ 챗GPT/머신러닝/자동화 무료 세미나 진행중!
https://m.cafe.naver.com/chatgptcomm/166
[앵콜 무료 세미나] 챗GPT/머신러닝/자동화 부업 활용사례 및 미래 전망
(키홈의 무료세미나 참여 후 어떤것들을 얻으셨는지, 댓글을 참고해주세요) 신청을 희망하시는 분들은 아래 배너를 클릭해주세요.👇👇 신청을 희망하시는 분들은 아래 배너를 클릭...
cafe.naver.com
# 자동 예약 프로세스 구현
예약 가능한 시간대가 확인되면, 원하는 시간대를 선택하고 예약을 진행합니다.
Selenium을 사용하여 웹 요소를 클릭하거나 필요한 정보를 입력하여 예약을 완료하는 기능을 구현합니다.
여기서는 특정 날짜의 시간대가 예약이 가능한경우 / 불가능한 경우를 나눠서 예외처리를 해두었습니다.
그래서 앞에서 얻은 시간대의 정보의 class가 anchor로 나오는 경우는 예약이 가능한 경우이므로 click()을 하도록 설정해둡니다!
elem_class = elem.get_attribute('class')
if elem_class == 'anchor':
book_possible = True
elem = driver.find_element("xpath", "/html/body/app/div[2]/div[2]/bk-freetime/div[2]/bk-select-time-schedule/div/div[2]/div[2]/ul/li[3]/a/span")
elem.click()
# 시간 클릭
만약 anchor가 아니고 다른 class일 경우는 넘어가주면 되므로 따로 else를 넣어주지는 않았습니다.
# 예약 확인 및 알림 설정
마지막으로 예약을 진행하게 되는데 앞에서 선택한 시간을 확인하고 다음단계로 진행합니다.
elem = driver.find_element("xpath", "/html/body/app/div[2]/div[2]/bk-freetime/div[2]/bk-select-time-schedule/div/div[3]/button")
elem.click()
# 예약시간 선택
elem = driver.find_element("xpath", "/html/body/app/div[2]/div[2]/bk-freetime/div[2]/div[2]/bk-submit/div/button")
elem.click()
# 다음단계
elem = driver.find_element("xpath", "/html/body/app/div[2]/div[2]/bk-freetime/div[2]/div[2]/bk-submit/div/button/span")
elem.click()
# 결제하기
아래와 같이 예약시간을 선택하고
예약시간이 선택이 되면 결제창으로 넘어가서 결제가 진행되게 됩니다.
여기서 결제를 위해서는 네이버 적립금이 있어야 진행되므로 사전에 채워놓아 주셔야 합니다!
# 예외 상황 처리
예약 시스템이나 네트워크 문제로 인해 예약이 실패할 수 있는 경우에 대비하여 예외 상황 처리 로직을 추가합니다. 예를 들어, 예약이 실패하면 다른 시간대를 확인하거나 재시도할 수 있는 기능을 구현합니다.
# 로깅 및 오류 처리
프로그램의 동작 상황을 추적하기 위해 로깅 기능을 추가합니다. 또한, 예외나 오류 발생 시 적절한 오류 처리를 하여 프로그램의 안정성을 높입니다.
결론1
파이썬을 사용하여 테니스장 예약을 자동화하는 매크로 프로그램을 만들었습니다.
이를 통해 사용자는 예약 가능한 시간대를 자동으로 확인하고 원하는 시간에 테니스장을 예약할 수 있습니다.
요즘은 Python으로 못하는게 없는 시대가 된 것 같습니다.
한번쯤 공부해보셔서 자동화된 예약 프로그램으로 편의성을 높이고 예약을 자동으로 해보는 것도 좋을 것 같습니다.
참고: 이 글은 파이썬과 Selenium, Beautiful Soup을 활용한 테니스장 예약 자동화의 예시로써, 특정 테니스장 예약 시스템에 따라 상세한 구현 방법은 달라질 수 있습니다.
✅ 챗GPT/머신러닝/자동화 무료 세미나 진행중!
https://m.cafe.naver.com/chatgptcomm/166
[앵콜 무료 세미나] 챗GPT/머신러닝/자동화 부업 활용사례 및 미래 전망
(키홈의 무료세미나 참여 후 어떤것들을 얻으셨는지, 댓글을 참고해주세요) 신청을 희망하시는 분들은 아래 배너를 클릭해주세요.👇👇 신청을 희망하시는 분들은 아래 배너를 클릭...
cafe.naver.com
\
'자동화 매크로' 카테고리의 다른 글
구글 드라이브 colaboratory 연동 및 실습코드 보는방법 (0) | 2023.08.16 |
---|---|
[MAC] Jupyter Notebook에서 root 폴더 위치 찾기! (0) | 2023.07.12 |
[키홈] Python selenium 자동화 cheat sheet (0) | 2023.06.24 |
Python Request 로 부동산 실거래가 페이지에서 정보를 크롤링하기! (0) | 2023.05.27 |
부동산 실거래가 자동 수집해서 내 집 마련하기! 아파트 실거래가 매크로 (6) | 2023.05.23 |