telegram.py
#예약하기
ticket_reservation = re.compile("예약[0-9]")
ticket_reservation_find = re.compile("[^예약]")
if ticket_reservation.match(con_text):
index_seq = ticket_reservation_find.findall(con_text)
index_seq = ''.join(index_seq)
self.korail.ticket_reservation(index_seq)
#7단계 글에서 검색, 결과 if문 밑에 추가하면 된다.
korail.py
def ticket_reservation(self, index_seq):
#from tel.telegram import KTX_Telegram
is_reserve = None
while True:
is_reserve = 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]//img" % index_seq).get_attribute("alt")
if is_reserve == "예약하기":
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).click()
#telegram_message = {'chat': {'id': 챗봇 id}, 'text': '예약완료'}
time.sleep(2)
try:
sancheon_popup_iframe = self.driver.find_element(By.ID, "embeded-modal-traininfo")
self.driver.switch_to.frame(sancheon_popup_iframe)
self.driver.find_element(By.XPATH, "/html/body/div/div[2]/p[3]/a").click()
time.sleep(2)
finally:
alert = self.driver.switch_to.alert
alert.accept()
token = "텔레그램 HTTP API";
bot = telepot.Bot(token)
bot.sendMessage('챗봇 id', '예약완료')
time.sleep(1)
else:
self.driver.find_element(By.CSS_SELECTOR, ".btn_inq > a:nth-child(1) > img:nth-child(1)").click()
time.sleep(2)
- while True:
: 매진일때 예약할때까지 무한루프를 돌기 위해 while 사용
- sancheon_popup_iframe = self.driver.find_element(By.ID, "embeded-modal-traininfo")
self.driver.switch_to.frame(sancheon_popup_iframe)
: KTX-산천을 예약하게 되면 예약하기 버튼을 눌렀을때 나오는 alert창 전에 iframe으로 창이 하나 더 뜬다.
iframe은 html 코드 안에 html이 하나 더 생기기때문에 iframe 태그로 selenium이 바라보는 창을 선택한 후 닫아야한다.
해당 위 id를 변수에 저장 후 switch_to.frame() 으로 창을 바꿔야한다. 바꾼 후 창닫기!
- alert = self.driver.switch_to.alert
alert.accept()
: 예약하기 버튼을 눌렀을때 alert 창이 뜨므로 switch_to.alert 를 통해서 accept를 눌러야 창이 지나간다.