본문 바로가기
PROGRAMMING/Python

[PYTHON] stale error 해결 방법 (selenium, 셀레니움)

by HYUNHP 2022. 7. 1.
728x90
반응형

안녕하세요, HELLO

 

오늘은 selenium library를 사용할 경우 발생하게 되는 'stale error'의 해결 방법에 대해서 살펴보고자 합니다. 

 

selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document

 

위 에러는 페이지에서 데이터가 업로드되기 전에 너무 빨리 데이터를 가져올 경우, 발생하는 에러입니다.

이를 해결하기 위해서는 명시적으로 'time.sleep()'을 입력해서 해결도 가능합니다.

 

다만, 이처럼 진행하게 되면 페이지 구성에 따라 데이터마다 가져오는 속도가 상이하기에, 오랜 시간이 걸릴 수도 있으며, 더 안 좋은 경우는 데이터가 업로드되기에 시간이 충분하지 못해서 데이터를 가져오지 못하거나, 동일한 에러가 발생할 수 있습니다.

 

이 경우에는 "WebDriverWait" 그리고 "visibility_of_all_elements_located()"를 통해서 해결할 수 있습니다.

 

 

STEP 1. 'stale error 해결' 방법

본격적으로 설명하기에 앞서 호출할 라이브러리를 확인해보겠습니다.

 

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

 

1. webDriverWait은 데이터가 업로드될 때까지 기다리는 함수입니다.

webDriverWait(driver, time)을 통해 사용할 수 있으며,  이때 driver는 webdriver를, time은 최대 대기 시간(sec)을 나타냅니다. 만약, 데이터가 최대 대기 시간보다 더 걸릴 경우에는 종료됩니다.

 

2. presence_of_all_elements_located 함수는 뒤에 검토할 대상 (class, xpath, css selector, etc)의 데이터 업로드를 전부 확인합니다. 

 

그래서 위 2개 함수를 활용해서, selenium에서 데이터 들어오는 시간을 탄력적으로 관리할 수 있습니다.

 

driver = webdriver.Chrome(executable_path=PATH, options=options)

# class
WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.CLASS_NAME, 'target_name')))

# css selector
WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'target_name')))

# xpath
WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.XPATH, 'target_name')))

 

반응형

 

■ 마무리

'stale error 해결 방법 (selenium, 셀레니움)'에 대해서 알아봤습니다.

좋아요댓글 부탁드리며,

오늘 하루도 즐거운 날 되시길 기도하겠습니다 :)

감사합니다.

반응형

댓글