Python/Selenium

Selenium ElementNotFound 오류 해결하기

PySun 2025. 2. 1. 09:14
반응형

소개

웹 자동화 도구인 Selenium을 사용할 때 자주 발생하는 오류 중 하나가 'ElementNotFound' 오류입니다. 이는 Selenium이 특정 요소를 찾지 못할 때 발생합니다. 이러한 문제는 웹 페이지 로딩 속도가 느리거나, 요소가 DOM에서 비활성화되어 있거나 잘못된 셀렉터를 사용할 때 발생할 수 있습니다. 이 글에서는 이 오류의 일반적인 원인과 해결 방법을 함께 살펴보겠습니다.

에러 발생 예시 코드

먼저, 'ElementNotFound' 오류가 발생할 가능성이 있는 간단한 예시 코드를 살펴보겠습니다.

from selenium import webdriver
from selenium.webdriver.common.by import By

# 웹 드라이버 초기화
driver = webdriver.Chrome()

# 웹 페이지 열기
driver.get("https://example.com")

# 존재하지 않는 요소에 접근 시도
element = driver.find_element(By.ID, "non_existing_id")
print(element.text)

에러 해결 방법

1. 명확한 셀렉터 사용

먼저, 확인하고자 하는 요소가 올바른 ID, 클래스, 또는 CSS 선택자를 사용하는지 검토해 보세요. 웹 페이지의 DOM 구조에 따라 아이디나 클래스명이 변경된 경우가 많기 때문에, 이를 주의해야 합니다.

from selenium import webdriver
from selenium.webdriver.common.by import By

# 웹 드라이버 초기화
driver = webdriver.Chrome()

# 웹 페이지 열기
driver.get("https://example.com")

# 올바른 ID를 사용하여 요소에 접근
element = driver.find_element(By.ID, "existing_id")
print(element.text)

2. 요소가 로드될 때까지 대기하기

웹 페이지가 로드되는 데 시간이 걸릴 수 있으므로, 요소가 실제로 페이지에 나타날 때까지 기다리는 것이 중요합니다. WebDriverWait을 사용하여 요소가 로드되기를 기다릴 수 있습니다.

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://example.com")

# 요소가 로드될 때까지 대기
element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "existing_id"))
)
print(element.text)

3. 요소가 비활성화된 경우 처리하기

요소가 비활성화 상태일 수 있습니다. 이 경우, 요소가 활성화될 때까지 기다리거나 현재 상태를 체크하는 로직을 추가하는 것이 필요합니다.

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://example.com")

# 비활성화된 요소가 활성화되기를 기다림
element = WebDriverWait(driver, 10).until(
     EC.element_to_be_clickable((By.ID, "existing_id"))
)
print(element.text)

마무리

Selenium에서 'ElementNotFound' 오류는 다양한 원인으로 발생할 수 있으며, 이는 웹 페이지의 구조나 로딩 속도와 관련이 있습니다. 이 블로그 글에서는 간단한 수정으로 이러한 오류를 해결할 수 있는 방법들을 살펴보았습니다. 여러분의 웹 자동화 스크립트가 실패하지 않도록 올바른 셀렉터를 사용하고, 웹 페이지 로드를 적절히 관리하는 것이 중요합니다. 항상 긍정적인 마인드로 오류를 극복해 나가시길 바랍니다!

반응형