일반적으로 셀레니움을 진행하다 보면 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
반응형
'🖥 Python' 카테고리의 다른 글
[Selenium] Elements 위치(좌표) 가져오기 (0) | 2023.05.09 |
---|---|
[Selenium] Element 텍스트 추출하기 (0) | 2023.04.22 |
[Selenium] 페이지 스크롤 하기 (0) | 2023.03.20 |
[Selenium] iframe 전환하기 (1) | 2023.01.25 |
[Selenium] 창 컨트롤 (0) | 2023.01.13 |