Study_Note

selenium : python 시간대기 명령어 본문

selenium (with python)

selenium : python 시간대기 명령어

12월7일생 2023. 4. 28. 17:08
728x90
반응형

셀레니움에서 대기하는 방법에는 time.sleep(), implicit waits, explicit waits가 있습니다.

 

time.sleep():
time.sleep()은 코드 실행을 일정 시간동안 멈추는 함수입니다. 

이를 사용하여 강제로 대기할 수 있지만, 정확한 대기시간을 보장하지 않습니다. 

또한, 대기 시간을 고정적으로 설정해야 하므로 유연성이 떨어집니다.

Implicit Waits:
Implicit Waits는 driver.implicitly_wait()를 사용하여 전체 코드 실행 동안 WebDriver가 일정 기간을 기다리도록 설정하는 것입니다. 

이 설정은 전역적으로 적용되며, 웹 요소가 로드되는 데 필요한 최대 시간을 설정할 수 있습니다.

대기시간을 자동으로 처리하므로 유연성이 높아집니다.

그러나 일부 상황에서는 대기시간이 길어지는 등의 문제가 있을 수 있습니다.

Explicit Waits:
Explicit Waits는 특정 웹 요소가 나타날 때까지 기다리는 것입니다. 

WebDriverWait 클래스와 expected_conditions 모듈을 사용하여 웹 요소가 특정 조건(예: element_to_be_clickable(), presence_of_element_located())을 충족할 때까지 대기합니다. 

이 방법은 유연성이 가장 높으며, 대기시간도 정확하게 조절할 수 있습니다. 

그러나 각각의 웹 요소마다 대기시간을 설정해야 하므로 코드 길이가 길어지는 등의 단점이 있을 수 있습니다.

따라서, 강제적인 대기가 필요한 경우 time.sleep()을 사용하고, 

대기시간을 일괄적으로 처리하려면 Implicit Waits를 사용하며, 

특정 웹 요소가 나타날 때까지 대기해야 하는 경우에는 Explicit Waits를 사용하는 것이 좋습니다.

 

 

time.sleep()

time.sleep()은 가장 간단한 대기 방법입니다.
하지만 정확한 대기 시간을 예측하기 어렵고,
불필요한 대기시간을 발생시키거나 대기시간이 부족하여 오류가 발생할 수 있습니다.
아래는 예시 코드입니다.

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.example.com")

# 5초 대기
time.sleep(5)

# 다음 동작 수행
# ...

driver.quit()

Implicit Waits

Implicit Waits는 WebDriver 객체가 요청을 받았을 때 모든 요소를 찾을 때까지 지정된 시간동안 대기하는 것입니다.
이 기능은 전역 설정으로 적용되기 때문에 모든 요청에 적용됩니다.
아래는 예시 코드입니다.

from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(10) # 최대 10초 대기

driver.get("https://www.example.com")
# ...

driver.quit()

위 코드에서 driver.implicitly_wait(10)은 최대 10초 동안 대기하도록 설정합니다.

driver.get() 등의 요청이 전송될 때 요소가 로드되기까지 최대 10초 대기합니다.

Explicit Waits

Explicit Waits는 명시적으로 원하는 조건이 충족될 때까지 대기하는 것입니다.
이를 위해 WebDriverWait 클래스를 사용합니다.
아래는 예시 코드입니다.

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

driver = webdriver.Chrome()
driver.get("https://www.example.com")

# 특정 요소가 로드될 때까지 최대 10초 대기
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.ID, "my_id")))

# 대기 후 요소에 대한 동작 수행
# ...

driver.quit()

위 코드에서 WebDriverWait 클래스를 사용하여 최대 10초 동안 대기하도록 설정합니다.
wait.until() 메소드를 사용하여 EC.presence_of_element_located 조건이 충족될 때까지 대기합니다.
이후 대기 후 요소에 대한 동작을 수행하면 됩니다.

 

 

 

'selenium (with python)' 카테고리의 다른 글

selenium : python , 창 전환  (0) 2023.04.28
selenium : python iframe 전환하기  (0) 2023.04.28
selenium python : page scroll  (0) 2023.04.28
selenium python : Import, from, as  (0) 2023.04.28
Chrome Driver  (0) 2023.04.27