안녕하세요,
먼저 무료로 좋은 강의 해주신 나도코딩님께 진심으로 감사하다는 말씀 드립니다. :)
나도코딩님 강의영상을 보면 알 수 있듯이 강의 녹화일이 2020년 8월로 보입니다.
현재 제가 강의를 수강중인 날은 2023년 1월 19일입니다.
관련해서 네이버 항공권 웹 페이지의 인터페이스가 많이 상이한 상태입니다.
또한 python버전 3.10.7 버전을 사용중이고 셀레니움도 상위버전을 사용하고있어, 나도코딩님께서 사용하시는 browser.find_element_by_class_name 과 같은 메소드를 사용하면 에러가 발생하고 있었습니다.
관련해서 이번 강의에서도 find_elements_by_link_text와 같은 메소드를 사용하시고 계시는데, 현재 웹페이지가 달라져서 그런지, 해당 메소드를 사용하면 빈 리스트만 반환받고 있는 상태입니다. (저의 경우에..)
관련해서 코드를 아래와같이 작성해보았습니다.
정상동작하고 원하는 대로 동작하는것까지 확인했습니다.
확실히 삽질을해야 공부가 되는것 같습니다. ㅎ
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
URL = "https://flight.naver.com/"
def compute_date(dates, target) -> list:
print("compute entire date information from current month to limit")
return [date for date in dates if date.text == str(target)]
browser = webdriver.Chrome()
# browser.maximize_window()
browser.get(URL)
time.sleep(1)
# remove AD popup
find = browser.find_elements(By.CLASS_NAME, "anchor")
for f in find:
if f.get_attribute("title") == "지금 바로 혜택 확인하기":
browser.find_element(By.XPATH, '//*[@id="__next"]/div/div[1]/div[9]/div/div[2]/button[1]').click()
print("remove pop up")
break
# push 가는 날 button also delay 1 sec is necessary, if don't use this, can not read date information.
browser.find_element(By.XPATH, '//*[@id="__next"]/div/div[1]/div[4]/div/div/div[2]/div[2]/button[1]').click()
time.sleep(1)
# read date information and push 25 day
dates = browser.find_elements(By.CLASS_NAME, "sc-evZas dDVwEk num".replace(" ", "."))
compute_date(dates, 25)[0].click()
# read date information and push 30 day
dates = browser.find_elements(By.CLASS_NAME, "sc-evZas dDVwEk num".replace(" ", "."))
compute_date(dates, 30)[0].click()
while True:
pass
코드 작성내용은 아래와 같습니다.
네이버 항공권 페이지 진입시 "지금 바로 혜택 확인하기" 광고 팝업창 발생으로, 해당 팝업창 확인시 삭제
link_text로 "가는 날" 엘리먼트 확인이 어려워 XPATH로 변경
link_text로 원하는 날짜 엘리먼트 확인이 어려워 class이름을 확인해 원하는 날짜를 가지고 오도록 구현 (compute_date 함수 참고 부탁드립니다.)
글을 작성하고 업로드 하기전에 더블체크 해봤는데,
compute_date(dates, 30)[1].click()
이렇게 코드를 수정하면 2월30일을 눌러야 하는데 3월 30일을 누르는 문제가 있는데, 이부분도 확인 및 개선이 되고 기억을 한다면 수정해볼 수 있도록 하겠습니다.
저처럼 초반에 고생하시는분께 조금이나마 도움이 되었으면 좋겠습니다.
감사합니다.