본문 바로가기
IT study/python

Selenium을 이용한 자동화

by 핸조 2023. 1. 13.
import sys
import os
import time

from selenium import webdriver
from selenium.webdriver.common.by import By
# 리스트 포함하는 element를 다루기 위한 선언
#from selenium.webdriver.support.select import Select

options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches',['enable-logging'])

#크롬드라이버 경로
driver = webdriver.Chrome(r)

#SRT 로그인페이지
#driver.get('https://etk.srail.kr/cmc/01/selectLoginForm.do')

#멤버십 ID/PW
id_num = ''
pw_num = ''


#ID/PW 입력
idput = driver.find_element(By.NAME,"srchDvNm")
pwput = driver.find_element(By.NAME,"hmpgPwdCphd")

# 공백
idput.clear()
pwput.clear()

# 멤버십 번호 입력
idput.send_keys(id_num)
pwput.send_keys(pw_num)

# 확인버튼 클릭
okput = driver.find_element(By.XPATH,'//*[@id="login-form"]/fieldset/div[1]/div[1]/div[2]/div/div[2]/input')
okput.click()

# 예매페이지 접속
#driver.get('https://etk.srail.kr/hpg/hra/01/selectScheduleList.do?pageId=TK0101010000') // 편도 예약 시
driver.get('https://etk.srail.kr/hpg/hra/01/selectShuttleScheduleList.do?pageId=TK0101010000')  ## 왕복 예약 시
driver.implicitly_wait(5)

# 출발역/도착역 선택을 위한 지역 리스트
area_list = ['','']

# 출발지 입력
start_area = ""
end_area = ""

# 출발역 자동으로 넣기 위한 셀리니옴
areaput = driver.find_element(By.NAME,"dptRsStnCdNm")
endareaput = driver.find_element(By.NAME,"arvRsStnCdNm")

# 기본값 삭제
areaput.clear()
endareaput.clear()

# 출발역/도착역 입력
areaput.send_keys(start_area)
endareaput.send_keys(end_area)

# 여정경로 선택
#route_list = "왕복"
#route_type = driver.find_element(By.NAME,"chtnDvCd")
#route_type.send_keys(route_list)


### 왕복 승차권 구매 시

# 가는일
start_date = ""

# 가는일 선택
start_date_put = driver.find_element(By.NAME,"dptDt1")
start_date_put.send_keys(start_date)

# 가는시간 
start_time = ""

# 가는시간 선택
start_time_put = driver.find_element(By.NAME,"dptTm1")
start_time_put.send_keys(start_time)

# 오는일
end_date = ""

# 오는일 선택
end_date_put = driver.find_element(By.NAME,"dptDt2")
end_date_put.send_keys(end_date)

# 오는시간
end_time = "18"

# 오는시간 선택
end_time_put = driver.find_element(By.NAME,"dptTm2")
end_time_put.send_keys(end_time)

# 조회버튼 클릭
find_srt = driver.find_element(By.ID,"search_top_tag")
find_srt.click()

##페이지 안정화 /// 이걸 안해주면 예약하기 버튼 클릭이 안되는지 확인 필요
train_schedule_add = '/html/body/div/div[4]/div/div[3]/div[1]/form/fieldset/div[6]/table/tbody/tr[1]/td[10]/a'
for i in range(10):    
    try:
        driver.find_element_by_xpath(train_schedule_add)
        print('pass')
        break
    except:
        print('delay count: ', i)
    time.sleep(0.05)


# 가는열차/오는열차 예약가능 여부 확인
#first_ticket = driver.find_element(By.CSS_SELECTOR,f"#result-form > fieldset > div:nth-child(7) > table > tbody > tr > td:nth-child(7) > a").text
#second_ticket = driver.find_element(By.CSS_SELECTOR,f"#result-form > fieldset > div:nth-child(14) > table > tbody > tr:nth-child(2) > td:nth-child(7) > a").text

while True:
    try:
        ##가는 일반실 예약
        standard = '/html/body/div/div[4]/div/div[2]/div[4]/div/form/fieldset/div[6]/table/tbody/tr/td[7]/a'
        standard_ticket = driver.find_element(By.XPATH,standard)
        standard_ticket.click()

        ##오는 일반실 예약
        second = '/html/body/div/div[4]/div/div[2]/div[4]/div/form/fieldset/div[13]/table/tbody/tr[1]/td[7]/a'
        second_ticket = driver.find_element(By.XPATH,second)
        second_ticket.click()
    except:
        print('try....')
        pass
    try:
        request = driver.find_element(By.XPATH,'//*[@id="result-form"]/fieldset/div[19]/input[2]')
        request.click()
        break
    except:
        print('예약불가')
        pass
    time.sleep(3)
    driver.refresh()
    print('예약완료')

목적

주기적으로 고향 갈 때 예매하는데 자동으로 할 수 없을까 ? 하다가 만듦