셀레니움으로 네이버 항공권 자동으로 검색하기 1편 python



📍 네이버 항공권 자동 검색




📌 셀레니움 라이브러리 로딩


Python
from selenium import webdriver # 셀레니움 라이브러리
from selenium.webdriver.common.by import By # 홈페이지 선택자를 가져오는 라이브러리
import time # 시간을 잠시 멈추기 위한 라이브러리



📌 크롬 홈페이지 열기


Python
driver = webdriver.Chrome()
driver.get('https://flight.naver.com/flights/')



네이버 항공권 홈페이지 일부사진



📌 필요한 입력값 적기


Python
start_area = input("출발지를 적어주세요 : ")
end_area = input("도착지를 적어주세요 : ")

start_day_input = input('출발 날자를 적어주세요(숫자로 0000 00 00) : ')
end_day_input = input('오는 날자를 적어주세요(숫자로 0000 00 00) : ')

# 출발하는날 날짜를 공백 기준으로 나누고 나중에 검색해야할 0000.00. 형식으로 다시 저장
start_list = start_day_input.split(" ")
start_day = start_list[2]
start_month = start_list[0] + "." + start_list[1] + "."

# 돌아오는 날
end_list = end_day_input.split(" ")
end_day = end_list[2]
end_month = end_list[0] + "." + end_list[1] + "."



📌 행선지 입력하기


Python
# 버튼 찾기
start_area_button = driver.find_element(By.XPATH, '//*[@id="__next"]/div/div/div[4]/div/div/div[2]/div[1]/button[1]/b')
end_area_button = driver.find_element(By.XPATH, '//*[@id="__next"]/div/div/div[4]/div/div/div[2]/div[1]/button[2]/b')


# 가는 곳 누르기
start_area_button.click()
time.sleep(1)
search_area = driver.find_element(By.CLASS_NAME, 'autocomplete_input__1vVkF')
search_area.send_keys(start_area)
time.sleep(1)
finish_area = driver.find_element(By.CLASS_NAME, 'autocomplete_inner__3Owyw')
finish_area.click()
time.sleep(1)

# 오는 곳 누르기
end_area_button.click()
time.sleep(1)
search_area = driver.find_element(By.CLASS_NAME, 'autocomplete_input__1vVkF')
search_area.send_keys(end_area)
time.sleep(1)
finish_area = driver.find_element(By.CLASS_NAME, 'autocomplete_inner__3Owyw')
finish_area.click()
time.sleep(1)



📌 날짜 입력하기



Python
# 날짜 누르는 함수 정의하기
def select_day(input_month, input_day):
    all_day = driver.find_elements(By.CLASS_NAME,'sc-kDDrLX.ctbFvd.month')
    month_day = []
    for i in all_day:
        month = i.find_elements(By.CLASS_NAME,'sc-iqcoie.dCaTmH')
        for j in month:
            if j.text == input_month:
                month_day = i.find_elements(By.CSS_SELECTOR,'.day b')
    for i in month_day:
        if i.text == input_day:
            i.click()
            break



# 출발, 돌아오는 날짜 버튼 찾기
day_area_start = driver.find_element(By.XPATH,'//*[@id="__next"]/div/div/div[4]/div/div/div[2]/div[2]/button[1]')
day_area_end = driver.find_element(By.XPATH,'//*[@id="__next"]/div/div/div[4]/div/div/div[2]/div[2]/button[2]')

# 출발하는 날짜 버튼 누르기
day_area_start.click()
time.sleep(1)

# 출발 날짜
select_day(start_month, start_day)
time.sleep(1)

# 돌아오는 날짜
try:
    day_area_end.click()
    time.sleep(1)
    select_day(end_month, end_day)
except:
    select_day(end_month, end_day)
time.sleep(1)




📌 검색 버튼 누르기


Python
# 마지막 검색버튼 누르기
search = driver.find_element(By.XPATH,'//*[@id="__next"]/div/div/div[4]/div/div/div[2]/button')
search.click()
driver.implicitly_wait(10)




📌 전체 코드


Python
from selenium import webdriver # 셀레니움 라이브러리
from selenium.webdriver.common.by import By # 홈페이지 선택자를 가져오는 셀레니움 라이브러리
import time # 시간을 잠시 멈추기 위한 라이브러리



# 날짜 누르는 함수 정의하기
def select_day(input_month, input_day):
    all_day = driver.find_elements(By.CLASS_NAME,'sc-kDDrLX.ctbFvd.month')
    month_day = []
    for i in all_day:
        month = i.find_elements(By.CLASS_NAME,'sc-iqcoie.dCaTmH')
        for j in month:
            if j.text == input_month:
                month_day = i.find_elements(By.CSS_SELECTOR,'.day b')
    for i in month_day:
        if i.text == input_day:
            i.click()
            break


driver = webdriver.Chrome()
driver.get('https://flight.naver.com/flights/')


start_area = input("출발지를 적어주세요 : ")
end_area = input("도착지를 적어주세요 : ")

start_day_input = input('출발 날자를 적어주세요(숫자로 0000 00 00) : ')
end_day_input = input('오는 날자를 적어주세요(숫자로 0000 00 00) : ')

# 출발하는날 날짜를 공백 기준으로 나누고 나중에 검색해야할 0000.00. 형식으로 다시 저장
start_list = start_day_input.split(" ")
start_day = start_list[2]
start_month = start_list[0] + "." + start_list[1] + "."

# 돌아오는 날
end_list = end_day_input.split(" ")
end_day = end_list[2]
end_month = end_list[0] + "." + end_list[1] + "."

# 버튼 찾기
start_area_button = driver.find_element(By.XPATH, '//*[@id="__next"]/div/div/div[4]/div/div/div[2]/div[1]/button[1]/b')
end_area_button = driver.find_element(By.XPATH, '//*[@id="__next"]/div/div/div[4]/div/div/div[2]/div[1]/button[2]/b')


# 가는 곳 누르기
start_area_button.click()
time.sleep(1)
search_area = driver.find_element(By.CLASS_NAME, 'autocomplete_input__1vVkF')
search_area.send_keys(start_area)
time.sleep(1)
finish_area = driver.find_element(By.CLASS_NAME, 'autocomplete_inner__3Owyw')
finish_area.click()
time.sleep(1)

# 오는 곳 누르기
end_area_button.click()
time.sleep(1)
search_area = driver.find_element(By.CLASS_NAME, 'autocomplete_input__1vVkF')
search_area.send_keys(end_area)
time.sleep(1)
finish_area = driver.find_element(By.CLASS_NAME, 'autocomplete_inner__3Owyw')
finish_area.click()
time.sleep(1)

# 출발, 돌아오는 날짜 버튼 찾기
day_area_start = driver.find_element(By.XPATH,'//*[@id="__next"]/div/div/div[4]/div/div/div[2]/div[2]/button[1]')
day_area_end = driver.find_element(By.XPATH,'//*[@id="__next"]/div/div/div[4]/div/div/div[2]/div[2]/button[2]')

# 출발하는 날짜 버튼 누르기
day_area_start.click()
time.sleep(1)

# 출발 날짜
select_day(start_month, start_day)
time.sleep(1)

# 돌아오는 날짜
try:
    day_area_end.click()
    time.sleep(1)
    select_day(end_month, end_day)
except:
    select_day(end_month, end_day)
time.sleep(1)

# 마지막 검색버튼 누르기
search = driver.find_element(By.XPATH,'//*[@id="__next"]/div/div/div[4]/div/div/div[2]/button')
search.click()
driver.implicitly_wait(10)



가장 싼 항공권을 네이버 크롤링해서 가져오기 2편 python