개발자/파이썬

파이썬 Selenium (셀레니움) 스크롤(Scroll)

june__kim 2021. 1. 2. 23:02

파이썬 Selenium (셀레니움) 스크롤(Scroll)

 

2021/01/01 - [개발자/파이썬] - 파이썬 (Selenium) 로딩까지 기다림 (feat. WebDriverWait)

 

저번 글에서는 로딩시간을 위한 Waits에 대해서 이야기해봤다.

 

이번 글에서는 스크롤에 대해서 적어보려고 한다.

 

스크롤 (Scroll)

보통 웹페이지에서 한번에 모든 정보를 제공하지 않는다.

스크롤을 해야 그 아래의 정보까지 파싱할 수 있는 경우가 있는데,

이때 우린 스크롤(Scroll) 동작을 통해 아래의 정보까지 가져올 수 있다.

 

※ 지정한 위치로 스크롤 내리기

# 지정한 위치로 스크롤 내리기
# 모니터(해상도)의 높이인 900 위치로 스크롤 내리기
browser.execute_script("window.scrollTo(0, 900)")

내 컴퓨터의 경우엔, 화면의 높이가 900이어서 그냥 900으로 넣어줬는데.

이건 각자 알아서 숫자를 바꿔주면서 조절해주면 될 것 같다.

이 코드를 통해 지정한 위치로 스크롤이 내려간다.

 

※ 화면의 가장 아래로 스크롤 내리기

# 화면 가장 아래로 스크롤 내리기
browser.execute_script("window.scrollTo(0,document.body.scrollHeight)")

이 코드를 이용하면, 현재 화면에서 가장 아래로 스크롤된다.

 

※ 무한 스크롤

웹페이지의 끝이 나올 때까지, 무한 스크롤을 해야하는 경우가 있는데,

이떄 아래의 코드처럼, 현재의 높이를 가져와서 이용 할 수 있다.

prev_height = browser.execute_script("return document.body.scrollHeight")

 

이를 이용하여 무한 스크롤을 구현하는 예제는 아래와 같다.

(잘 이해가 안된다면 한번 직접 실행해보자)

import requests
from bs4 import BeautifulSoup
import time

headers = {
    "User-Agent":"각자의 User-Agent를 넣어주자",
    "Accept-Language":"ko-KR,ko"
    }

from selenium import webdriver
browser = webdriver.Chrome("각자의 chromedriver 경로를 넣어주자")
browser.maximize_window()

url = "https://play.google.com/store/movies/top"
browser.get(url)

prev_height = browser.execute_script("return document.body.scrollHeight")

# 웹페이지 맨 아래까지 무한 스크롤
while True:
    # 스크롤을 화면 가장 아래로 내린다
    browser.execute_script("window.scrollTo(0,document.body.scrollHeight)")
    
    # 페이지 로딩 대기
    time.sleep(2)

    # 현재 문서 높이를 가져와서 저장
    curr_height = browser.execute_script("return document.body.scrollHeight")

    if(curr_height == prev_height):
        break
    else:
        prev_height = browser.execute_script("return document.body.scrollHeight")

 

끝~~