Python 과 Telegram, selenium으로 KTX 자동 예매하기(7. 검색 및 결과 데이터 텔레그램으로 전송하기)
-
반응형
telegram.py
if con_text == "검색":
self.korail.korail_search()
if con_text == "결과":
self.token = "BotFather를 통해 봇을 생성했을때 주는 HTTP API token값"
self.bot = telepot.Bot(self.token)
self.bot.sendMessage(chat_id, result)
전편에서 생성했던 내용 밑에 추가해주면 된다.
텔레그램 봇 대화창에 검색이라고 입력을 하면 korail.py의 클래스 안에 korail_search() 함수가 호출된다.
결과데이터는 korail.py 모듈에서 검색을 통해 나온 결과데이터를 넘겨주면 봇 대화창에 뿌려줄 예정이다.
korail.py
def korail_search(self):
self.driver.find_element(By.CSS_SELECTOR, "#center > form > div > p > a > img").click()
time.sleep(3)
ktx_list = []
for index_seq in range(1, 11):
try:
ktx_list.append(str(index_seq))
ktx_list.append(self.driver.find_element(By.XPATH, "/html/body/div[1]/div[3]/div/div[1]/form[1]/div/div[4]/table[1]/tbody/tr[%s]/td[3]" % index_seq).text)
ktx_list.append(self.driver.find_element(By.XPATH, "/html/body/div[1]/div[3]/div/div[1]/form[1]/div/div[4]/table[1]/tbody/tr[%s]/td[4]" % index_seq).text)
ktx_list.append(self.driver.find_element(By.XPATH, "/html/body/div[1]/div[3]/div/div[1]/form[1]/div/div[4]/table[1]/tbody/tr[%s]/td[6]/a[1]/img" % index_seq).get_attribute("alt"))
ktx_list.append("---------------")
except:
ktx_list.append("해당시간 이후의 기차표는 없습니다.")
ktx_info = '\n'.join(ktx_list)
#telegram_message = {'chat': {'id': 챗봇의 id값}, 'text': '결과'}
token = "텔레그램 token api";
bot = telepot.Bot(token)
bot.sendMessage('챗봇의 id값', ktx_info)
위 내용을 살펴보면 검색이라는 단어를 통해 korail_search() 함수가 호출된다.
- self.driver.find_element(By.CSS_SELECTOR, "#center > form > div > p > a > img").click()
: 조회하기 버튼을 클릭한다.
- time.sleep(3)
: 조회하기 버튼을 통해 검색되는 데이터의 로딩시간을 기다린다.
- ktx_list = []
: 결과 데이터를 담기 위한 배열
- for index_seq in range(1,11):
: 검색을 통해 나온 결과데이터의 10개 리스트를 전송하기 위해 range(1,11)를 사용했따.
: range(1,11)은 1~10까지의 숫자를 의미한다.
- 이미지 참고
위 내용을 보면 xpath는 element의 각각 요소들을 순서대로 찾아가기 위해 사용한다.
소스코드를 보면 중간에 %s 라는 데이터와 % index_seq 라는 배열의 index 값이 존재한다.
문자열 포매팅이라고 하는데 문자열 사이에 포맷코드(%d, %s 등등)를 대입시켜 % 뒤에 나오는값으로 변환하도록 한다.