웹 자동화를 하다 보면 페이지가 로딩되기 전에 요소를 찾으려고 해서 NoSuchElementException 에러가 발생하는 경우가 많다.
이럴 때는 WebDriverWait과 expected_conditions를 활용해서 요소가 로딩될 때까지 기다리는 코드를 작성할 수 있다.
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("https://www.naver.com")
time.sleep(1)
# 3. Driver Wait
# 3-1. 3초 때 로딩이 끝나서, element가 찾아짐.
# 3-2. 30초까지는 기다림
# 3-3. 30초 넘어가면 에러던짐.
try:
selector = "#newsstand > div.ContentHeaderSubView-module__content_header_sub___Yszwk > div.ContentHeaderSubView-module__sub_news___DECMU > a"
WebDriverWait(driver, 30).until(EC.presence_if_element_located(By.CSS_SELECTOR, selector))
except:
print("예외 발생, 예외 처리 코드 실행")
print("엘리먼트 로딩 끝")
강의 출처 : https://www.inflearn.com/course/selenium-%EA%B8%B0%EB%B3%B8-%EA%B3%BC%EC%A0%95/dashboard