빠르게, 정확하게: Selenium 대기 방법의 선택과 올바른 활용

Selenium으로 자동화된 브라우저 상호 작용 시, 요소의 활성화나 특정 조건 충족까지 기다려야 하는 경우가 빈번합니다. 'Time.sleep()', 'Implicit Wait', 'Explicitly Wait' 등 세 가지 대기 방법의 장단점과 활용법을 자세히 알아보세요. 효율적인 웹 자동화에 필수인 대기 전략을 효과적으로 선택하고 활용하는 방법을 알려드립니다.

 

0. 개요

Selenium을 사용하여 브라우저 상호 작용을 자동화할 때 요소가 사용 가능해지거나 특정 조건이 충족될 때까지 기다려야 하는 시나리오에 자주 직면합니다.
Selenium의 대기하는 방법에는 'Time.sleep()' 'Implicit Wait' 'Explicitly Wait' 입니다. 하지만 어느 것을 사용해야 할까요?
세 가지의 차이점을 각각의 장단점을 통해 자세히 비교해보겠습니다.
 
 

1. Time.sleep()

이는 스크립트에 고정된 지연을 도입하는 Python 기본 방법입니다. time.sleep(초)가 호출되면 전체 스크립트의 실행이 지정된 초 동안 일시 중지됩니다.
 

1.1. Time.sleep()의 장점

  • 사용이 간단하고 설정이 필요하지 않습니다.
  • 스크립트가 대기하는 시간을 정확하게 알 수 있습니다.
 

1.2. Time.sleep()의 단점

  • 대부분의 경우 고정된 지연은 필요한 것보다 길어서 테스트 실행 시간이 늘어납니다.
  • 기다리고 있는 작업이 수면 시간보다 긴 시간 내에 완료되면 테스트가 실패할 수 있습니다.
 
 

2. Implicit Wait

from selenium import webdriver driver = webdriver.Chrome() driver.implicitly_wait(10) # WebDriver will wait for up to 10 seconds for an element to appear driver.get('<https://example.com>') element = driver.find_element_by_id('some-id') 요소가 웹 페이지에 나타나지 않는 경우 "해당 요소 예외 없음"을 발생시키기 전에 지정된 시간 동안 기다리도록 Selenium WebDriver에 지시합니다.
 

2.1. Implicit Wait의 장점:

  • WebDriver는 요소가 더 일찍 사용 가능해지면 전체 시간을 기다리지 않습니다.
  • time.sleep()을 사용하는 것보다 속도가 더 빠릅니다.
  • WebDriver 전체 세션에 적용됩니다.
 

2.2. Implicit Wait의 단점

  • Implicit Wait는 WebDriver가 진행하거나 실패하기 전에 실제로 얼마나 오랫동안 기다렸는지 확신할 수 없기 때문에 디버깅을 어렵게 만들 수 있습니다.
  • Implicit Wait와 Explicitly Wait를 혼합하면 예측할 수 없는 대기 시간이 발생할 수 있습니다.
 
 

3. Explicitly Wait

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 driver = webdriver.Chrome() driver.get('<https://example.com>') # Waiting for up to 10 seconds until an element with the specified ID becomes visible element = WebDriverWait(driver, 10).until( EC.visibility_of_element_located((By.ID, 'some-id')) )
 

3.1. Explicitly Wait의 장점

  • 요소의 유무뿐만 아니라 다양한 조건을 지정할 수 있습니다. 예를 들어 요소가 클릭 가능하거나 표시되거나 특정 텍스트가 나타날 때까지 기다립니다.
  • WebDriver 전체 세션 설정이 아니기 때문에 동작과 요구 사항에 따라 다양한 요소에 대해 다양한 대기를 정의할 수 있습니다.
  • 테스트 기간을 불필요하게 연장하지 않습니다. 조건이 충족되면 스크립트가 진행됩니다.
  • 더 나은 오류 메시지를 제공하여 테스트가 실패할 경우 무엇이 잘못되었는지 더 쉽게 이해할 수 있습니다.
 

3.2. Explicitly Wait의 단점

  • Implicit Wait와 달리 필요할 때마다 대기 조건을 설정해야 합니다.
  • AJAX 또는 다양한 시간 간격으로 로드되는 웹 요소를 처리하는 경우에만 적합합니다.
 
 

4. 결론 : 상황에 알맞게 대기 방법을 선택하자.

Implicit Wait는 설정된 기간 내에 모든 요소를 사용할 수 있도록 넓은 그물을 던지는 것과 비슷하지만 Explicitly Wait는 특정 조건의 특정 요소를 대상으로 하는 낚싯대를 사용하는 것과 비슷합니다.
실제로는 Implicit Wait와 Explicitly Wait를 혼합하지 않는 것이 좋습니다. 마구잡이로 혼합하여 사용할 경우, 예측 불가능한 동작이 발생할 확률이 올라갑니다.
주로 세부적인 제어가 가능한 Explicitly Wait가 복잡한 웹 애플리케이션 환경에서 선호되는 선택이 되는 경우가 많습니다.
위 내용을 잘 참조하셔서 기능을 적재적소에 활용하시길 바랍니다.