이제 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, 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 마무리)