๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์›น

Selenium time.sleep() VS Implicitly Waits() VS Explictly Waits()

728x90

Implicitly Waits(์•”๋ฌต์  ๋Œ€๊ธฐ) VS Explictly Waits(๋ช…์‹œ์  ๋Œ€๊ธฐ) ์˜ ์ฐจ์ด

๋จผ์ € ๋Œ€๊ธฐ(wait)์˜ ๊ธฐ๋ณธ์ ์ธ ๋ช…๋ น์–ด๋Š”

time.sleep(1)

์ด๋Š” ๋ฌผ๋ฆฌ์ ์ธ ์‹œ๊ฐ„์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ช…๋ น์–ด๋‹ค.

import time
time.sleep(1) //1์ดˆ ๋Œ€๊ธฐ
time.sleep(0.1) //0.1์ดˆ ๋Œ€๊ธฐ
Implicitly_wait(์•”๋ฌต์  ๋Œ€๊ธฐ) explicitly_wait(๋ช…์‹œ์  ๋Œ€๊ธฐ)
: ํŽ˜์ด์ง€ ์ด๋™ ๋“ฑ์˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ–ˆ์„๋•Œ, ๋‹ค์Œ ์›น ํŽ˜์ด์ง€๊ฐ€ ๋„˜์–ด์˜ฌ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ผ๋Š” ๋œป(์›นํŽ˜์ด์ง€ ์ „์ฒด๊ฐ€ ๋„˜์–ด์˜ฌ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ) : ํ•œ๊บผ๋ฒˆ์— ๋ชจ๋“  ํŽ˜์ด์ง€์˜ ์š”์†Œ๋“ค์ด ๋‹ค ๋กœ๋”ฉ๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์ง€๋งŒ, ๋Œ€๋ถ€๋ถ„ ์ „์ฒด ํŽ˜์ด์ง€์˜ ์ผ๋ถ€๋ถ„์ด ๋จผ์ € ๋กœ๋”ฉ๋˜์–ด ๋Šฆ๊ฒŒ ๋กœ๋”ฉ๋˜๋Š” ๋ถ€๋ถ„์ด ์กด์žฌํ•œ๋‹ค.(=>๋™์  DOM)(์›นํŽ˜์ด์ง€์˜ ์ผ๋ถ€๋ถ„์ด ๋‚˜ํƒ€๋‚ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ)

Implicitly_wait์˜ ๊ฒฝ์šฐ: ์ˆ˜์ง‘์„ ๋ชฉ์ ์œผ๋กœ ํ•˜๋Š” ์ด๋ฏธ์ง€์˜ ๋กœ๋”ฉ์ด ๋˜์ง€ ์•Š๋Š” ์ƒํƒœ์—์„œ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ๋„˜์–ด๊ฐ€ ์ˆ˜์ง‘์„ ํ•  ์ˆ˜ ์—†๋‹ค. 

<->time.sleep(10)์€ ๋กœ๋”ฉ์ด ๋‹ค ๋˜์—ˆ์–ด๋„ ์„ค์ •ํ•œ ์‹œ๊ฐ„(10์ดˆ)๋งŒํผ ๋ฌด์กฐ๊ฑด ๋Œ€๊ธฐ๋ฅผ ํ•œ๋‹ค.

from selenium import webdriver

driver=webdriver.Chrome('chromedriver.exe')
driver.implicitly_wait(5) // 5์ดˆ ๋™์•ˆ ์›น ํŽ˜์ด์ง€ ๋กœ๋”ฉ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ , 5์ดˆ ์ดํ›„์—” ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰
// 5์ดˆ ์ด์ „์— ๋กœ๋”ฉ์ด ์™„๋ฃŒ๋˜๋ฉด 5์ดˆ๋ฅผ ์ฑ„์šฐ์ง€ ์•Š์•„๋„ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

 

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
// explicitly_wait ์‚ฌ์šฉ์‹œ ์œ„์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋จผ์ € ์„ ์–ธํ•ด์ค˜์•ผํ•œ๋‹ค.

driver = webdriver.Chrome('chromedriver.exe')
driver.get("https://www.29cm.co.kr/shop/category/list?category_large_code=268100100&category_medium_code=new")

element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "idname")))

//explicitly_wait ์„ค๋ช…
//WebDriverWait(driver, ์‹œ๊ฐ„) - Implicitly_wait๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ '์‹œ๊ฐ„'์ „์— ๋กœ๋”ฉ๋œ๋‹ค๋ฉด ๋‹ค์Œ ์ฝ”๋“œ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.
//EC.presence_of_element_located(): ๊ด„ํ˜ธ์•ˆ์— ์š”์†Œ๊ฐ€ ๋‚˜ํƒ€๋‚ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค๋ผ.
//(By.ID, ‘์•„์ด๋””์ด๋ฆ„’)
//(By.CLASS_NAME, ‘ํด๋ž˜์Šค๋ช…’)
//(By.XPATH, ‘xpath๊ฒฝ๋กœ’)
//(By.NAME, ‘๋„ค์ž„๋ช…’)
//(By.CSS_SELECTOR, ‘CSS์…€๋ ‰ํ„ฐ’)
//(By.PARTIAL_LINK_TEXT, ‘๋งํฌํ…์ŠคํŠธ์ผ๋ถ€๋ถ„’)
//(By.LINK_TEXT, ‘๋งํฌํ…์ŠคํŠธ(์ „๋ถ€์ผ์น˜)’)

 

์ฐธ๊ณ 

https://pythondocs.net/selenium/%EC%85%80%EB%A0%88%EB%8B%88%EC%9B%80-wait-%EA%B0%9C%EB%85%90-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-implicitly-wait-vs-explicitly-wait/

728x90