본문 바로가기

자동화/Selenium

Selenium 대기 방식 실행 시간 비교해보기 (Wait, Sleep)

728x90

Selenium에서 요소를 찾기 위해 시간이 필요하기 때문에 대기 기능을 사용합니다.

이론으로는 장단점을 많이 공부했지만 실행시간이 얼마나 차이 나는지 비교해보기 위해 간단한 코드를 작성하여 테스트하였습니다.

 

비교대상은 자주 사용하는 대기 기능 3가지입니다.

 

  • time.sleep
  • Implicit wait
  • Explicit wait

실행 시간을 비교하기 위한 시나리오는 아래와 같으며 각 time은 5초로 설정하고 비교하였습니다.

(동일한 시나리오 3번 반복 실행)

 

  1. 네이버 메인 홈으로 크롬 브라우저 열기 (https://www.naver.com)
  2. 회원가입 버튼 클릭
  3. 약관 모두 동의 후 확인 버튼 클릭

1. time.sleep

 

가장 편리하게 사용하는 방식이지만 특정 조건 없이 강제로 시간을 소요해서 대기하기 때문에 가장 추천하지 않은 방식입니다.

 

import time

time.sleep(5)

 

time.sleep을 사용했을 때 실행 시간은 약 12초로 확인되었습니다.

 

1번째 결과: 12.60초

2번째 결과: 12.54초

3번째 결과: 12.97초

 

2. Implicit wait

 

Implicit wait 암묵적 대기 방식은 특정 요소가 필요하지 않으며 웹페이지 로딩이 완료되기 까지 기다리는 방식입니다.

time.sleep보다는 괜찮지만 웹페이지가 로딩된 상태에서도 일부 내용이 보이지 않는 경우가 있기 때문에 예상치 못한 결과를 얻을 수 있는 단점이 있습니다.

 

driver.implicitly_wait(5)

 

Implicit wait 방식을 사용했을 때 실행 시간은 약 3초로 확인되었습니다.

 

1번째 결과: 3.65초

2번째 결과: 2.88초

3번째 결과: 2.65초

 

3. Explicit wait

 

Explicit wait 명시적 대기 방식은 해당 요소에 대한 조건을 충족할 때까지 대기하는 방식으로 전체 페이지가 아닌 해당 조건 요소만 충족되면 되는 방식입니다.

(주로 사용하는 조건은 presence_of_element_located, element_to_be_clickable 등이 있습니다.)

 

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

wait = WebDriverWait(driver, 5)
element = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'link_join')))

 

Explicit wait 방식을 사용했을 때 실행 시간은 약 3초로 확인되었습니다.

 

1번째 결과: 3.04초

2번째 결과: 3.12초

3번째 결과: 3.22

 

각 대기 기능을 비교한 결과 time.sleep 기능은 다른 2가지에 비해 불필요한 시간을 사용하는 것으로 확인되었습니다.

자동화 대기를 사용하실 때 Implicit wait 나 Explicit wait 방식을 사용하는걸 추천드립니다.

 

다만 Implicit wait 방식과 Explicit wait 방식을 동시에 혼합하여 사용하지 않아야 합니다.

selenium 문서에서도 명시하고 있는 내용인데 예측할 수 없는 초과시간이 발생할 수 있기 때문입니다.

 

해당 주의사항만 알고 대기 코드를 작성하시면 불필요한 대기 시간을 많이 줄일 수 있습니다.

 

 

728x90