[Selenium] ์‹œ๊ฐ„ ๋Œ€๊ธฐ

์ผ๋ฐ˜์ ์œผ๋กœ ์…€๋ ˆ๋‹ˆ์›€์„ ์ง„ํ–‰ํ•˜๋‹ค ๋ณด๋ฉด 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