반응형
소개
웹 자동화를 하다 보면 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'을 활용하여 요소의 가용성을 기다리는 것이 중요합니다. 항상 유연하고 안전하게 웹 자동화를 진행하는 것이 좋습니다!
반응형
'Python > Selenium' 카테고리의 다른 글
Selenium.get_css_value로 CSS 속성 가져오기 (1) | 2025.01.08 |
---|---|
Selenium TimeoutException 오류 해결하기 (0) | 2025.01.08 |
Selenium SessionNotCreatedException 오류 해결하기 (0) | 2025.01.08 |
Selenium.is_enabled로 요소 활성화 여부 확인하기 (0) | 2025.01.08 |
Selenium.is_selected로 체크박스 선택 여부 확인하기 (0) | 2025.01.08 |