일반적으로 셀레니움을 진행하다 보면 NoSuchElementException에러를 종종 발견할 수 있다. 대부분 시간적인 이슈로 발생하는 에러이다. (통신 중, 또는 요소를 불러오는 도중 코드 실행) 이럴 때 주로 시간대기를 이용해서 해결할 수 있다.

1. Time.sleep

  • Python의 sleep 같은 경우에는 인수로 ms 단위가 아닌 초(sec) 단위의 숫자를 받기 때문에 사용하기에 매우 직관적이다.그렇기 때문에 간단한 대기나 짧은 시간의 대기 정도는 sleep()을 사용해서 대기를 하는 것도 좋다.

▶︎ 예시 

import time

driver.get('http://naver.com') #사이트 진입
time.sleep(2) #2초대기

time.sleep(0.5) #0.5초대기

2. 암시적 대기 (Implicit Waits)

  • 암시적 대기란 페이지가 로드될 때까지 기다리라는 뜻이다. sleep()과 차이점은 sleep()은 지정된 시간 동안 무조건 기다리라는 뜻이고, 암시적 대기는 지정한 시간이 되기 전에 페이지 로드가 끝나면 다음 작업을 진행하라는 뜻이다.

▶︎ 예시 

driver.get('http://naver.com') #사이트 진입
driver.implicitly_wait(10)  #암시적 대기 10초

3. 명시적 대기 (Explicit Waits)

  • 명시적 대기란 해당 요소가 불러와질 때까지 대기 상태를 걸어 "명시적으로 기다리는 것"이다. 불러오지 못할 시, Timeout 으로 설정된 시간만큼 기다린다.
  • Selenium에서만 사용되는 특수한 메서드 / 특정 요소에 적용

▶︎ 예시 

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver.get('http://naver.com')
WebDriverWait(driver, 100).until(EC.presence_of_element_located((By.CSS_SELECTOR, "div.header")))

 

 

📄 Ref.Site

https://velog.io/@eunjeong/TIL-Selenium-%EC%8B%9C%EA%B0%84%EB%8C%80%EA%B8%B0
https://velog.io/@tkjung/Wait%EC%9D%98-%EC%A2%85%EB%A5%98
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기