Python

[Selenium] 암시적 대기(Implicit Wait)

비번변경 2021. 11. 9. 19:19

암시적 대기(Implicit Wait)

Driver 객체가 get(url)로 요청한 페이지의 내용이 모두 로딩을 완료할 때까지 암묵적으로 대기한다.

 

필요성

selenium diagram

Python으로 Selenium을 조작할 때 Python은 Selenium으로 신호를 보내고, Selenium은 웹 브라우저로 신호를 보낸다. 웹 브라우저는 접속하고자 하는 서버에 웹 페이지를 보여달라는 신호를 보내고, 서버는 HTML, CSS, Javascript 등으로 구성된 웹 페이지를 웹 브라우저로 보낸다. 그리고 웹 브라우저는 전달받은 정보를 화면으로 변환해서 눈으로 보여준다.

이 과정에는 시간이 필요하다.

Selenium은 실제로 웹 브라우저를 동작시키기 때문에 driver.get()으로 URL을 호출하자마자, 접속하고자 하는 서버로부터 데이터를 받기도 전에 브라우저 화면을 조작하려고 하면 의도한 대로 동작하지 않거나 예외가 발생할 수 있다.

따라서 브라우저에 화면을 보여줄 때까지 기다리는 과정이 필요하다.

 

코드

driver 객체 생성 후, 최초 1번만 설정하면 글로벌하게 적용된다.

from selenium import webdriver

# 드라이버 경로
path='/usr/bin/chromedriver'

# 옵션 설정
options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument('window-size=1920x1080')
options.add_argument("disable-gpu")
options.add_argument("user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36")

driver = webdriver.Chrome(path, options=options)

# 대기 설정
driver.implicitly_wait(10) # 10초 간 페이지 로딩 대기

인자값은 초 단위이며, 설정된 시간보다 빠르게 로딩을 마치면 더 기다리지 않고 바로 다음 코드를 실행한다.

 

 

 

참고 문서

https://velog.io/@kjh03160/Selenium

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