python/배운 내용 정리

selenium을 활용한 페이지 스크롤 내리기(동적페이지)

직장인코딩 2022. 10. 3. 00:02
반응형

 

안녕하세요 :)

이번에는 selenium 모듈을 활용해서 동적페이지에서

스크롤을 끝까지 내리는 것을 해보았는데요

 

동적페이지란 스크롤을 끝까지 내리면 새로운 항목이 나오는 것처럼

페이스북 페이지 같은 것들을 얘기하죠!

 

아래 코드로 실행 해보았습니다.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import pyautogui
import time
driver = webdriver.Chrome()
driver.maximize_window

driver.get("https://shopping.naver.com/home/p/index.naver") 
# 네이버 쇼핑에 접속해줍니다.

driver.find_element_by_xpath('//*[@id="autocompleteWrapper"]/input[1]').send_keys("무선마우스")
# 무선마우스를 검색창에 입력해줍니다.
pyautogui.press("enter")

# 지정한 위치로 스크롤 내리기
#driver.execute_script("window.scrollTo(0, 1080)")
# 이건 0. 1080의 절대값 위치로 이동하는 것입니다.
#driver.execute_script("window.scrollTo(0, 2080)")
# 내모티너는 1920 x 1080 이다. (모니터해상도에따라 다르게 입력)


# 화면 가장 아래로 스크롤 내리기
#driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')
# 자바스크립트의 함수를 이용해 페이지를 끝까지 내리는 것입니다.
# 동적 페이지에 대해서 마지막까지 스크롤 반복 수행
interval = 2 # 2초에 한번씩 스크롤 내리기

#현재 문서 높이를 가져와서 저장
prev_height = driver.execute_script('return document.body.scrollHeight')

# 반복 수행
while True:
    # 스크롤을 화면 가장 아래로 내림
    driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')

    # 페이지 로딩 대기(2초)
    time.sleep(interval)

    # 현재 문서 높이 가져오기
    curr_height = driver.execute_script('return document.body.scrollHeight')

    # 현재 문서 높이와 전 문서높이가 같으면 탈출
    if curr_height == prev_height:
        break

    # 전 문서높이와 비교를 위해 현재 높이를 전 높이에 입력
    prev_height = curr_height

# 이렇게 하는 이유는 전문서높이와 현재 문서높이가 같아질때까지 계속해서 수행하므로
전문서높이와 현재문서높이가 같아지면 더 이상 내릴 것이 없다는 뜻입니다.


driver.execute_script('window.scrollTo(0, 0)')

time.sleep(5)
driver.quit()
 

 

 

반응형