<초보코딩님 유투브로 공부하며 정리하였습니다>
목표
1. 코레일 홈페이지 들어가서
2. 팝업 창 끄고
3. 예약 정보 입력
4. 매진인지 확인
4-1) 매진이면? refresh (조회하기 클릭)
4-2) 매진 아니면 예매버튼 클릭
매크로 만들기
0. selenium에서 webdriver 모듈 들고 와서,
1. chrome driver 켜기
from selenium import webdriver
driver = webdriver.Chrome('D:\chromeDriver\chromedriver.exe')
2. 코레일 홈페이지 url 가져와서, 입력
url = "https://www.letskorail.com/ebizprd/prdMain.do"
driver.get(url)
3. 팝업창 끄기
- 창 이동은 switch_to를 사용
- 현재 어떤 창들이 켜져있는지 확인하기 위해
driver.window_handles
- 첫 요소가 메인창, 두번째 요소가 팝업창임
- 리스트 형태로 되어있기 때문에, index를 사용해서 두번째 요소에 접근할 수 있음
- 두번째 요소에 접근해서 close 하고, 다시 메인 창에 제어권 넘겨주기
#close pop-up window driver.switch_to.window(driver.window_handles[1]) driver.close() #select main-window driver.switch_to.window(driver.window_handles[0])
4. 매진 표 찾기
2021년 8월 13일 토요일 오후 7시(19시)에
서울에서 강릉으로 가는 특실 예매할 예정
예매표 HTML 코드
<div class="tk_box">
<fieldset class="box01">
<legend>승차권 예매하기</legend>
<ul class="cont_lin">
<li><label for="txtGoStart">출발역</label>
<input type="text" id="txtGoStart" name="txtGoStart" class="txt120" value="서울" title="출발역" autocomplete="off" style="ime-mode:active">
<a href="#" onclick="return btnPopWin(1,'txtGoStart');" title="출발역 조회팝업이 뜹니다."><img src="/images/btn_sch_r.gif;jsessionid=a6E07VNPDNnYAgsDYtkxPTQRL1bvoZraXXwhoGdMwfpLgEjWpz1rvVv4PrDGwca6" alt="검색" class="btn_sch_r"></a>
</li>
<li><label for="txtGoEnd">도착역</label>
<input type="text" id="txtGoEnd" name="txtGoEnd" class="txt120" value="부산" title="도착역" autocomplete="off" style="ime-mode:active">
<a href="#" onclick="return btnPopWin(1,'txtGoEnd');" title="도착역 조회팝업이 뜹니다."><img src="/images/btn_sch_r.gif;jsessionid=a6E07VNPDNnYAgsDYtkxPTQRL1bvoZraXXwhoGdMwfpLgEjWpz1rvVv4PrDGwca6" alt="검색" class="btn_sch_r"></a></li>
</ul>
<ul>
<li><label for="selGoStartDay">출발일</label>
<input type="text" id="selGoStartDay" name="start" class="txt120" value="2021.8.9" title="출발일" readonly="readonly">
<a href="#" onclick="return btnPopWin(2,'main', 'N');" title="달력 팝업창이 뜹니다."><img src="/images/btn_calendar.gif;jsessionid=a6E07VNPDNnYAgsDYtkxPTQRL1bvoZraXXwhoGdMwfpLgEjWpz1rvVv4PrDGwca6" alt="달력" class="btn_sch_r"></a>
</li>
<li><label for="time">시간</label>
<select id="time" class="select" name="selGoHour" title="출발일시:시">
<option value="00">0 (오전00)</option>
<option value="01">1 (오전01)</option>
<option value="02">2 (오전02)</option>
<option value="03">3 (오전03)</option>
<option value="04">4 (오전04)</option>
<option value="05">5 (오전05)</option>
<option value="06">6 (오전06)</option>
<option value="07">7 (오전07)</option>
<option value="08">8 (오전08)</option>
<option value="09">9 (오전09)</option>
<option value="10">10 (오전10)</option>
<option value="11">11 (오전11)</option>
<option value="12">12 (오후00)</option>
<option value="13">13 (오후01)</option>
<option value="14">14 (오후02)</option>
<option value="15">15 (오후03)</option>
<option value="16">16 (오후04)</option>
<option value="17">17 (오후05)</option>
<option value="18">18 (오후06)</option>
<option value="19">19 (오후07)</option>
<option value="20">20 (오후08)</option>
<option value="21">21 (오후09)</option>
<option selected="selected" value="22">22 (오후10)</option>
<option value="23">23 (오후11)</option>
</select>시<input type="hidden" name="txtGoHour">
<input type="hidden" name="selGoYear" value="2021">
<input type="hidden" name="selGoMonth" value="08">
<input type="hidden" name="selGoDay" value="09">
<input type="hidden" name="txtGoYoil" value="월">
</li>
<li><label for="people_num">인원</label>
<select id="people_num" name="txtPsgFlg_1" title="예약인원 : 어른" class="selt147">
<option selected="selected" value="0">어른 0명</option>
<option selected="selected" value="1">어른 1명</option>
<option value="2">어른 2명</option>
<option value="3">어른 3명</option>
<option value="4">어른 4명</option>
<option value="5">어른 5명</option>
<option value="6">어른 6명</option>
<option value="7">어른 7명</option>
<option value="8">어른 8명</option>
<option value="9">어른 9명</option>
</select>
</li>
</ul>
<p class="btn_res"><a href="javascript:inqSchedule()"><img src="/images/btn_reserve.gif;jsessionid=a6E07VNPDNnYAgsDYtkxPTQRL1bvoZraXXwhoGdMwfpLgEjWpz1rvVv4PrDGwca6" alt="승차권예매" border="0"></a></p>
</fieldset>
</div>
승차권 예매하는 매크로
url = "https://www.letskorail.com/ebizprd/prdMain.do"
driver.get(url)
time.sleep(3)
#close pop-up window
#for i in range(0,1) :
driver.switch_to.window(driver.window_handles[1])
driver.close()
time.sleep(1)
#select main-window
driver.switch_to.window(driver.window_handles[0])
time.sleep(1)
xpath = '//input[@id="txtGoEnd"]'
driver.find_element_by_xpath(xpath).clear()
driver.find_element_by_xpath(xpath).send_keys("강릉\n")
time.sleep(1)
xpath1 = '//img[@alt="달력"]'
driver.find_element_by_xpath(xpath1).click()
time.sleep(1)
#move to pop-up
driver.switch_to.window(driver.window_handles[1])
time.sleep(1)
xpath2 = '//span[@id="d20210813"]'
driver.find_element_by_xpath(xpath2).click()
time.sleep(1)
#move to main-window again
driver.switch_to.window(driver.window_handles[0])
time.sleep(1)
xpath3 = '//select[@id="time"]'
driver.find_element_by_xpath(xpath3).click()
driver.find_element_by_xpath(xpath3).send_keys("19")
time.sleep(1)
xpath4 = '//img[@alt="승차권예매"]'
driver.find_element_by_xpath(xpath4).click()
time.sleep(1)
while True :
if select_btn == "예약하기" :
driver.find_element_by_xpath(xpath6).click()
break
else :
print(select_btn)
time.sleep(0.5)
driver.refresh()
'python 공부 > 매크로 만들기' 카테고리의 다른 글
[파이썬 매크로 만들기] #07. Selenium으로 홈페이지 관련 매크로 만들기 (0) | 2021.08.09 |
---|---|
[파이썬 매크로 만들기] #06. 화면 인식 기반 (0) | 2021.08.09 |
[파이썬 매크로 만들기] #05. 화면 색깔 인식하기 (0) | 2021.08.09 |
[파이썬 매크로 만들기] #04. 매크로 시작 단축키 만들기 (1) | 2021.08.09 |
[파이썬 매크로 만들기] #03. PYAUTOGUI로 네이버 로그인 매크로 만들기 (0) | 2021.08.09 |