python으로 자동화 할 수 있는 일이 많다 티켓팅 같은 경우에 유용한데 SRT 자동예매를 통해서 익혀보자
크롤링에는 selenium, beutiful soup 을 주로 사용하는데 이번에는 selenium으로 해보았다
1. Library를 불러오기
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
import time
2. browser 열기
browser = webdriver.Chrome()
url = 'https://etk.srail.kr/cmc/01/selectLoginForm.do?pageId=TK0701000000'
browser.get(url)
3. 로그인 하기
browser.find_element(By.ID, 'srchDvCd3').click() # 헨드폰 번호로 로그인
browser.find_element(By.ID, 'srchDvNm03').click() # 헨드폰 번호 창 클릭
browser.find_element(By.ID, 'srchDvNm03').send_keys('01012341234') # 헨드폰 번호 입력
browser.find_element(By.ID, 'hmpgPwdCphd03').click() # 비밀번호 창 클릭
browser.find_element(By.ID, 'hmpgPwdCphd03').send_keys('password') # 비밀번호 입력
browser.find_element(By.XPATH, '//*[@id="login-form"]/fieldset/div[1]/div[1]/div[4]/div/div[2]/input').click() # 로그인 클릭
4. 예약하기
reserve_url = 'https://etk.srail.kr/hpg/hra/01/selectScheduleList.do?pageId=TK0101010000'
browser.get(reserve_url)
browser.find_element(By.ID, 'arvRsStnCdNm').clear()
browser.find_element(By.ID, 'arvRsStnCdNm').send_keys('동대구') # 도착역 입력
browser.find_element(By.XPATH, '//*[@id="dptTm"]/option[11]').click() # 출발 시간 선택
browser.find_element(By.XPATH, '//*[@id="search_top_tag"]/input').click() # 기차표 조회
import time
# 30번 반복하며 매진이면 새로고침, 아니면 예약 클릭
for i in range(30):
is_soldout = browser.find_element(By.XPATH, '//*[@id="result-form"]/fieldset/div[6]/table/tbody/tr[1]/td[7]/a')
print(f'{i}번째 시도 중입니다.')
if is_soldout.text == '매진':
browser.refresh()
time.sleep(1)
else:
browser.find_element(By.XPATH, '//*[@id="result-form"]/fieldset/div[6]/table/tbody/tr[1]/td[7]/a').click()
좀 더 응용하면 멋지게 만들 수 있다 30번 반복이 아니라 살 때까지 반복으로 해서 예약을 누르게 되면 슬랙이나 카톡 메신저로 메세지를 보내도록 하면 실제로 유용하게 쓸 수 있을 것 같다 API를 이용해서 만들어보자