암시적 대기(Implicit Wait)
Driver 객체가 get(url)로 요청한 페이지의 내용이 모두 로딩을 완료할 때까지 암묵적으로 대기한다.
필요성
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초 간 페이지 로딩 대기
인자값은 초 단위이며, 설정된 시간보다 빠르게 로딩을 마치면 더 기다리지 않고 바로 다음 코드를 실행한다.
참고 문서