python 크롤링 - 브라우저 로딩 기다리기

Have a good one!·2022년 9월 5일
0

인공지능사관학교

목록 보기
12/13

무조건 기다리기

time.sleep(n)

  • python 내장 라이브러리
  • n초 만큼 무조건 기다림
  • 웹 페이지 로딩이 끝났어도 주어진 시간을 계속 기다리기 때문에 비효율적
import time
with webdriver.Firefox() as driver:
	driver.get(url)
    time.sleep(10)
    e = driver.find_element()

암시적으로 기다리기

implicitly_wait()

with webdriver.Firfox() as driver:
	driver.implicity_wait(10) #10초
    driver.get(url)
    e = driver.find_element()
  • 암시적으로 기다림 수행
  • 웹 페이지를 새로 로딩할 때마다 (driver.get) 최대 최대 n초까지 기다림.
  • 웹 페이지의 로딩이 끝나면 기다리기를 종료하고 코드를 수행
  • 한 번만 설정해 주면 계속해서 적용

명시적 기다리기

WebDriverWait(driver, {시간})

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

with webdriver.Firefox() as driver:
	driver.get(url)
    e = webDriverWait(driver, 10).until(
    	EC.presence_of_element_located((By.IDm "id_name"))
    ) #해당 요소 불러올 떄까지 10초 기다림.
  • 기다릴 요소를 명시
  • 명시된 요소가 해당 방식으로 불러와 질 떄까지 최대 n초 기다림
  • 요소는 class_name, xpath 등 다양한 방법으로 찾을 수 있음.

presence_of_element_located()

  • 괄호 안의 요소가 나타날 때까지 기다림.

(By.ID "id_name")

  • 요소를 찾는 방법과 파라미터를 의미
  • id외에 대표적으로 사용하는 것
  • By.XPATH, "xpath"
  • By.CLASS, "class_name"

element_to_be_clickable

  • 해당 요소가 클릭 가능해 질 때 까지 기다림.

예제 코드

import time

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

with webdriver.Firefox() as driver:
    driver.get("http://localhost:8080")

    # 지시사항 1번을 작성하세요.
    try:
        #먼저 wait 없이 브라우저의 로딩이 끝난 직후 요소를 추출하고, src 속성값을 출력합니다.
        img = driver.find_element_by_tag_name('img')
        print(img.get_attribute("src"))

    except Exception:
        print("아직 요소가 불러와지지 않았습니다.")

    driver.get("http://localhost:8080")

    # 지시사항 2번을 작성하세요.
    time.sleep(10) # 10초간 멈췸
    try:
        img = driver.find_element_by_tag_name('img')
        print(img.get_attribute("src"))

    except Exception:
        print("아직 요소가 불러와지지 않았습니다.")

    driver.get("http://localhost:8080")
    # 지시사항 3번을 작성하세요.
    driver.implicitly_wait(10) #암시적

    try:
        img = driver.find_element_by_tag_name('img')
        print(img.get_attribute("src"))

    except Exception:
        print("아직 요소가 불러와지지 않았습니다.")


with webdriver.Firefox() as driver:
    driver.get("http://localhost:8080")
    # 지시사항 4번을 작성하세요.
    # 다시 웹 페이지에 접속하고, 이번엔 요소를 명시하여 최대 10초간 로딩을 기다렸다 요소를 추출하고, src 속성값을 출력합니다.
    try:
        img = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, "img")))
        print(img.get_attribute("src"))

    except Exception:
        print("아직 요소가 불러와지지 않았습니다.")
profile
Have a good one!

0개의 댓글