[selenium] 동적 스크롤 페이지 검색 & 스크롤하기

2021-04-16

selenium을 이용해 동적 스크롤 웹페이지에 접속해 검색어를 입력하고, 검색 결과에서 맨 아래 페이지까지 스크롤한 다음 페이지 상단으로 되돌아오기.

유튜브 나도코딩 파이썬 코딩 무료 강의(활용편4)의 ‘동적 페이지 스크롤’ 실습 내용. 나중에 다른 동적 웹페이지 스크롤에도 활용할 수 있기에 기록해 둔다. 중간의 ‘반복 수행’(while문) 부분은 따로 함수로 만들어두고 써먹어도 좋을 듯.

import time
from selenium.webdriver.chrome.options import Options
from selenium import webdriver

options = Options()
options.binary_location = "/Applications/Google Chrome Dev.app/Contents/MacOS/Google Chrome Dev"
browser = webdriver.Chrome('./chromedriver', chrome_options=options)
browser.maximize_window()
browser.get("https://shopping.naver.com/")

# 무선마우스 입력
browser.find_element_by_xpath('//*[@id="autocompleteWrapper"]/input[1]').send_keys('무선마우스')

# 검색 버튼 클릭
browser.find_element_by_xpath('//*[@id="autocompleteWrapper"]/a[2]').click()

# 스크롤

# 지정한 위치로 스크롤 내리기
# 모니터 높이인 1050 위치로 스크롤 내림
# browser.execute_script('window.scrollTo(0, 1050)') # 1680*1050(모니터 해상도에 맞춤)
# browser.execute_script('window.scrollTo(0, 2050)')

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

# 동적 페이지에 대해 마지막까지 스크롤 반복 수행
interval = 2 # 2초에 한 번씩 스크롤 내리기

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

# 반복 수행
while True:
    # 스크롤을 화면 가장 아래로 내림
    browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
    
    # 페이지 로딩 대기(2초)
    time.sleep(interval)
    
    # 현재 문서 높이 가져와서 저장
    curr_height = browser.execute_script('return document.body.scrollHeight')
    if curr_height == prev_height: # 직전 높이와 같으면, 높이 변화가 없으면
        break # 스크롤 동작 완료

    prev_height = curr_height

# 맨 위로 올리기
browser.execute_script('window.scrollTo(0, 0)')

time.sleep(3)
browser.quit()

[동영상 보기]