새소식

반응형
Python/KTX 자동 예약하기

Python 과 Telegram, selenium으로 KTX 자동 예매하기(5. korail.py 설정 및 selenium 사용하여 로그인)

  • -
반응형

1. korail.py import 추가

from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import telepot
import time

********************Selenium 의 webdriver 최신버전의 문법이 바뀐거같다.

find_element_by_id 문법이 find_element 로 변경

 

 

- from selenium import webdriver

: selenium을 사용하기 위해 webdriver를 import 한다.

: Terminal에서 "pip install selenium" 명령어를 통해 라이브러리를 설치한다.

 

    * selenium

        : 웹 브라우저를 컨트롤하여 웹 UI를 자동화 하는 라이브러리이며, 웹 크롤링을 할때 사용한다.

 

- from selenium.webdriver.support.ui import Select

: Html 태그 중 Select Box 중 필요한 value를 선택하기 위해 selenium.webdriver 내부의 ui 기능을 import 한다.

 

- from selenium.webdriver.common.keys import Keys

: selenium으로 웹 크롤링 중 키보드 입력을 위한 모듈을 import 한다.

 

- import time

: 웹 브라우저가 켜지는 시간이 있기 때문에 딜레이를 주기 위해 time 라이브러리를 사용한다.

 

2. KTX_Korail Class 생성 및 로그인 설정

from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time

class KTX_Korail():
    def __init__(self):
        super().__init__()

    def login(self):
        self.driver = webdriver.Firefox()
        self.driver.get("https://www.letskorail.com/korail/com/login.do")
        time.sleep(1)
        self.driver.find_element(By.ID, "txtMember").send_keys("내 코레일멤버십번호 입력")
        self.driver.find_element(By.ID, "txtPwd").send_keys("코레일 비밀번호")
        // 여기서 XPATH 경로에 id 값을 큰따옴표로 묶었기 때문에 해당 XPATH 경로는 작은따옴표로 묶는다.
        self.driver.find_element(By.XPATH, '//*[@id="loginDisplay1"]/ul/li[3]/a/img').click()
        self.driver.find_element(By.CSS_SELECTOR, "#header > div.lnb > div.lnb_m01 > h3 > a > img").click()

 

- class KTX_Korail():

    def __init__(self):

        super().__init__()

: KTX_Korail 클래스를 생성 후 초기화 함수 설정

: super().__init__() 은 KTX_Korail() 클래스를 호출한 부모클래스인 KTX_Telegram() 클래스의 초기화 메서드를

  호출 및 사용하기 위해 설정한다.

 

* 자세한 내용은 아래 내용 확인

https://okimaru.tistory.com/183

 

super().__init__()

super().__init__() : 부모 클래스의 초기화 메서드 호출하기 : 자식 클래스에서 상속한 부모 클래스의 초기화 메서드가 필요할때 사용한다. class ParentObo(): def __init__(self, what, power): self.what_data..

okimaru.tistory.com

 

- def login(self):

    self.driver = webdriver.Firefox()

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

: driver 라는 변수에 파이어폭스 webdriver 를 사용하기 위해 넣는다.

: webdriver의 get 메소드를 통해 레츠코레일 로그인 화면으로 이동한다.

 

- time.sleep(1)

: 아이디, 비밀번호를 입력하기 전 웹 브라우저가 켜지는 속도 1초간 대기한다.

 

- self.driver.find_element(By.ID, "txtMember").send_keys("내 코레일멤버십번호 입력")

: webdriver의 find_element 를 통해 html 태그 중 id가 txtMember 인곳에 멤버십번호를 입력한다.

: 멤버십 번호는 webdriver.common.keys에 존재하는 Keys의 send_keys 메소드를 이용하여 입력한다.

- passwd = self.driver.find_element(By.ID, "txtPwd").send_keys("코레일 비밀번호")

: html 태그 중 id가 txtMember 인곳에 코레일 비밀번호를 입력한다.

 

- self.driver.find_element(By.XPATH, '//*[@id="loginDisplay1"]/ul/li[3]/a/img').click()

: 로그인하기 위한 확인 버튼 클릭

 

- self.driver.find_element(By.CSS_SELECTOR, "#header > div.lnb > div.lnb_m01 > h3 > a > img").click()

: webdriver의 css 선택자를 찾아가기 위해 find_element_by_css_seletor를 사용한다.

 

 

* find_element_by_css_seletor 의 선택자 내용을 쉽게 찾기 위한 방법

1. 해당 승차권 버튼이 있는 페이지에서 F12 키를 누른다.

2. F12키를 누르면 DevTools 창이 뜨는데 해당 창에서 웹페이지의 element를 선택하기 위한 버튼을 누른다.

 

3. 버튼을 누른후 승차권 버튼 클릭하면 아래 화면처럼 element에 접근이 된다.

4. 승차권 img 태그에서 마우스 오른쪽 클릭후 Copy > Copy seletor 선택하고 복사하면 seletor 값이 복사된다.

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.