[Selenium] Element 로딩 기다리기 (implicitly_wait() , WebDriverWait()) [Data Crawling][4]

2022. 4. 3. 02:32Data Crawling

반응형

[ Data Crawling ]

이번 포스팅은 동적 웹페이지를 크롤링할 때, 꼭 사용하게될 implicitly_wait()WebDriverWait()에 대해서 포스팅을 하도록 하겠습니다.

 

※ 해당 포스팅은 Chrome browser 기준으로 진행하였습니다.


[ Import Library ]

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

[ Chrome Driver Option 설정 ]

options = webdriver.ChromeOptions() # Browser 세팅하기
options.add_argument('lang=ko_KR') # 사용언어 한국어
options.add_argument('disable-gpu') # 하드웨어 가속 안함
# options.add_argument('headless') # 창 숨기기

driver = webdriver.Chrome(options=options) # 브라우저 세팅

[ implicitly_wait ]

implicitly_wait 함수는 페이지의 로딩이 완료될때까지 기다리는 함수 입니다.

함수에 들어가는 파라미터는 최대 N초 동안 대기 하였다가, N초 동안 페이지가 로딩 완료가 안되는 경우 에러를 일으킵니다만약, N초 안에 페이지 로딩이 완료되면, 이후 남은 시간을 무시하고 다음 코드가 실행이 됩니다.

# 브라우저에 URL 호출하기
driver.get(url='https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%EB%82%A0%EC%94%A8')

# 페이지 로딩 될때 까지 10초 대기 (로딩이 완료되면 즉시 다음 코드 실행)
driver.implicitly_wait(10)

# element 텍스트(현재 온도) 가져오기
temperature = driver.find_element_by_xpath('//*[@id="main_pack"]/section[1]/div[1]/div[2]/div[1]/div[1]/div/div[2]/div/div[1]/div[2]/strong').text
print(temperature)

[ WebDriverWait ]

WebDriverWait은 event로딩 될때 까지 n초 동안 대기 할수있게 하고, until을 이용하여 event를 설정할 수 있습니다.

아래 코드와 같이 element가 로딩 될때까지 10초 대기 후  element의 텍스트를 가져오도록 설정 할 수 있습니다.

# 브라우저에 URL 호출하기
driver.get(url='https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%EB%82%A0%EC%94%A8')

# 해당 Element 로딩 될 때까지 10초 대기후 Element 텍스트 가져오기 (로딩이 완료되면 즉시 다음 코드 실행)
temperature = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="main_pack"]/section[1]/div[1]/div[2]/div[1]/div[1]/div/div[2]/div/div[1]/div[2]/strong'))).text
print(temperature)

[ 결과 ]

현재 온도
3°
현재 온도
3°

이상 포스팅을 마치겠습니다.


[ 완성된 코드 ]

https://github.com/Mr-DooSun/Selenium-WebCrawling/blob/main/Ex4_waitdriver/ex4_waitdriver.py

 

GitHub - Mr-DooSun/Selenium-WebCrawling

Contribute to Mr-DooSun/Selenium-WebCrawling development by creating an account on GitHub.

github.com

 

반응형