플그래밍/파이써언

[파이썬 & 크롤링] Selenium "Select" - 드롭다운 옵션 추출 법

훗티v 2023. 8. 4. 18:25
728x90
반응형

크롤링 중 드롭다운 옵션을 추출해야할 경우에 대해서 알아볼께요

SRT 웹사이트 메인페이지에는 출발역을 선택하는 드롭다운이 있습니다

 

해당 드롭다운에서 선택가능한 모든 옵션을 추출해볼께요

먼저 요소를 직접 확인해서 어떤 옵션이 있는지 볼께요

<select name="dptRsStnCd" id="dptRsStnCd" class="dropDownNoJqueryUi" style="color: #6f135e;">
	<option value="" selected="">출발역</option>
	<option value="0551">수서</option>
	<option value="0552">동탄</option>
	<option value="0553">평택지제</option>
	<option value="0502">천안아산</option>
	<option value="0297">오송</option>
	<option value="0010">대전</option>
	<option value="0507">김천(구미)</option>
	<option value="0506">서대구</option>
	<option value="0015">동대구</option>
	<option value="0508">신경주</option>
	<option value="0509">울산(통도사)</option>
	<option value="0020">부산</option>
	<option value="0514">공주</option>
	<option value="0030">익산</option>
	<option value="0033">정읍</option>
	<option value="0036">광주송정</option>
	<option value="0037">나주</option>
	<option value="0041">목포</option>
</select>

 

총 18개의 출발역 옵션이 존재합니다

간단하게 파이썬 코드를 작성해볼께요

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options

option = Options()
option.add_argument('--headless')
option.add_argument('--disable-gpu')
option.add_argument('--window-size=1920,1080')
option.add_argument('--start-maximized')

service = Service()
# service.creation_flags = CREATE_NO_WINDOW
driver = webdriver.Chrome(service=service, options=option)
driver.get('https://etk.srail.kr/main.do')

main_window_handle = driver.current_window_handle
WebDriverWait(driver, 10).until(EC.number_of_windows_to_be(2))

for handle in driver.window_handles:
    if handle != main_window_handle:
        popup_window_handle = handle
        driver.switch_to.window(popup_window_handle)
        break

driver.close()
driver.switch_to.window(main_window_handle)

select_element = driver.find_element(By.NAME, 'dptRsStnCd')
select = Select(select_element)
all_options = select.options
print(f"[모든 옵션]")
for option in all_options:
    print(option.text, end=" ")

valid_options = [option for option in select.options if option.get_attribute("value") != ""]
print(f"\n\n[value 값을 가진 모든 옵션]")
for option in valid_options:
    print(option.text, end=" ")

value_options = [option for option in select.options if option.get_attribute("value") != ""]
print(f"\n\n[value 값을 가진 모든 옵션의 value 추출]")
for option in value_options:
    value_attribute = option.get_attribute("value")
    print(value_attribute, end=" ")

driver.quit()

 

총 19개의 옵션이 추출되고 value값을 가진 옵션만 추출할 경우 18개가 추출됩니다

value값 자체가 필요한 경우 아래와 같이 value값을 추출할 수도 있겠네요

 

 

 

 

 

 

반응형