본문 바로가기
Python/Selenium

Selenium StaleElementReferenceException 오류 해결하기

by PySun 2025. 1. 8.
반응형

소개

웹 자동화를 하다 보면 Selenium에서 'StaleElementReferenceException'이라는 에러를 마주칠 때가 많습니다. 이 오류는 웹 페이지의 요소가 더 이상 DOM(Document Object Model)에서 유효하지 않을 때 발생하는데요, 이는 페이지가 업데이트되거나 새로 고쳐지는 경우에 흔히 발생합니다. 오늘은 이 문제를 어떻게 해결할 수 있는지 알아보겠습니다.

에러 발생 예시 코드

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

from selenium import webdriver
import time

# 웹 드라이버 실행
driver = webdriver.Chrome()

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

# 특정 요소 선택
element = driver.find_element("id", "someElementId")
print(element.text)

# 페이지 대기 후 버튼 클릭
time.sleep(5)  # 5초 대기 (가상의 업데이트 시뮬레이션)
driver.find_element("id", "refreshButton").click()  # 페이지 업데이트
print(element.text)  # 다시 접근

에러 해결 방법

1. 요소를 다시 검색하기

'StaleElementReferenceException' 오류의 가장 간단한 해결책은 요소를 다시 검색하는 것입니다. 요소가 참조를 잃은 경우, 해당 요소를 다시 찾아서 변수를 업데이트할 수 있습니다.

from selenium import webdriver
import time

# 웹 드라이버 실행
driver = webdriver.Chrome()

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

# 특정 요소 선택
element = driver.find_element("id", "someElementId")
print(element.text)

# 페이지 대기 후 버튼 클릭
time.sleep(5)  
driver.find_element("id", "refreshButton").click()  # 페이지 업데이트

# 요소 다시 검색
element = driver.find_element("id", "someElementId")
print(element.text)  # 다시 접근

2. WebDriverWait 사용하기

Selenium에서 '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
import time

# 웹 드라이버 실행
driver = webdriver.Chrome()

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

# 특정 요소 선택
element = driver.find_element(By.ID, "someElementId")
print(element.text)

# 페이지 대기 후 버튼 클릭
time.sleep(5)
driver.find_element(By.ID, "refreshButton").click()  # 페이지 업데이트

# 요소의 가용성을 기다림
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "someElementId")))
print(element.text)  # 다시 접근

마무리

오늘은 Selenium을 사용할 때 종종 직면하는 'StaleElementReferenceException' 오류에 대해 알아보았습니다. 이 오류를 해결하기 위해서는 요소를 재검색하거나, 'WebDriverWait'을 활용하여 요소의 가용성을 기다리는 것이 중요합니다. 항상 유연하고 안전하게 웹 자동화를 진행하는 것이 좋습니다!

반응형