이제 korail.py를 봅시다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.keys import Keys
import time
 
class Korail():
    def __init__(self):
        super().__init__()
 
    def login(self):
        self.driver = webdriver.Firefox()
        self.driver.get("http://www.letskorail.com/korail/com/login.do")
        self.driver.find_element_by_id("txtMember").send_keys("내 코레일 아이디 번호")
        pw_form = self.driver.find_element_by_id("txtPwd")
        pw_form.send_keys("비밀번호")
        pw_form.send_keys(Keys.RETURN)
        time.sleep(1)
        alert_obj = self.driver.switch_to.alert
        alert_obj.accept()
        time.sleep(2)
        self.driver.find_element_by_css_selector("#header > div.lnb > div.lnb_m01 > h3 > a > img").click()   #예매 화면으로 이동
cs

앞에서 import 부분은 설명했고 다음 Korail() 클래스 안의 각 함수들은 모두 코레일 홈페이지 안에서의 명령을 진행합니다.

 

self.driver = webdriver.Firefox()

:파이어폭스 웹드라이버 엔진을 불러옵니다.

 

self.driver.get("http://www.letskorail.com/korail/com/login.do")

:코레일 홈페이지에 접속합니다. .get("주소")를 이용한 것을 알 수 있습니다.

 

self.driver.find_element_by_id("txtMember").send_keys("내 코레일 아이디 번호")

:.find_element_by_id 를 통해 html 태그의 아이디가 txtMember인 즉, 코레일 아이디 번호 입력하는 란으로 이동합니다. 그리고 바로 이어서 .send_keys("값")을 이용하여 채웁니다.

 

pw_form = self.driver.find_element_by_id("txtPwd")

pw_form.send_keys("비밀번호")

:이번 비밀번호 란의 경우에는 변수로 지정하여 비밀번호까지 입력 합니다.

 

pw.form.send_keys(Keys.RETURN)

:비밀번호 입력후 바로 엔터키를 입력합니다. Keys.원하는 키 의 방식으로 작동됨을 알수 있습니다.

 

time.sleep(1)

alert_obj = self.driver.switch_to.alert

alert_obj.accept()

time.sleep(2)

:일단 비밀번호를 입력 후 엔터를 누르면 창이 바뀌기 때문에 1초정도의 시간 딜레이를 줬는데 새로 로그인 화면이 뜨기 전에 아래 화면과 같이 웹드라이버를 통해 자동화 접근을 하는 경우에는 경고창이 뜹니다. 

계속을 눌러줘야 다음 화면으로 넘어갑니다.

그래서 경고창이 뜰 것을 예상하고 .switch_to.alert를 이용하여 활성화 창을 경고창으로 옮기는 변수를 정의하고 이어서 .accept()를 이용하여 "계속"을 눌러줍니다.

마찬가지로 경고창의 계속 버튼을 누르면 로그인 화면이 나오기 때문에 2초정도 기다려 줍니다.

 

self.driver.find_element_by_css_selector("#header > div.lnb >div.lnb_m01 > h3 > a > img").click()

: 막상 로그인을 하고 보면 아래와 같은 화면인데 우리가 작업을 진행하는 화면은 아닙니다.

그래서 아래 두번째 화면으로 이동하기 위한 명령입니다. 이번에는 find_element_by_css_selector를 이용하였고 그림파일의 버튼을 누르는 것까지 .click()을 넣어 한줄로 작성하였습니다.

이 화면에서 입력할 수는 있지만 하지 않습니다.
위화면을 계속 이용합니다.

위 화면을 이용하는 이유는 다양한 옵션도 있지만 무엇보다 계속해서 열차 예매 현황을 볼때 위화면이 계속 업데이트 되기 때문입니다.

 

일단 이 화면까지 오는 것이 기본적인 로그인 함수의 정의 입니다. 이제 텔레그램 봇 대화방에서 "로그인"을 입력하면 위 함수가 실행되는 것입니다.~

 

 

P.S. 이미 이전 블로그에서 로또 홈페이지 접근하여 원하는 정보를 가져오는 것을 넣어서 find_element_by...... 이부분에 대한 설명은 거의 넣지 않았습니다. 더 궁금하신 분은 인터넷에 많은 정보가 있고 또 아래 포스트를 참고하세요.

https://blog.naver.com/hjinha2/221829550253

 

[Python 크롤러 with Selenium] element Location 찾기 + input에다가 Value 입력 하기 + 버튼 클릭

#파이썬 #Python #오류해결 #크롤러 #크롤링 #Crawler #webdriver #웹제어 #제어 #웹 #web #크롬 #chrome...

blog.naver.com

짧고 간단하고 쉽게 나와 있습니다.^^

목차

Python, Telegram으로 KTX 열차표 예매하기(#1 준비)
Python, Telegram으로 KTX 열차표 예매하기(#2 __init__.py)
Python, Telegram으로 KTX 열차표 예매하기(#3 telegram.py, korail.py)
Python, Telegram으로 KTX 열차표 예매하기(#4 텔레그램봇 만들기)

Python, Telegram으로 KTX 열차표 예매하기(#5 telegram, telepot)
Python, Telegram으로 KTX 열차표 예매하기(#6 selenium, 웹 자동화)
Python, Telegram으로 KTX 열차표 예매하기(#7 selenium, regular expression)
Python, Telegram으로 KTX 열차표 예매하기(#8 열차표 확인하기)
Python, Telegram으로 KTX 열차표 예매하기(#9 예매하기)
Python, Telegram으로 KTX 열차표 예매하기(#10 마무리)

+ Recent posts