예를 들면 쇼핑몰 같은 페이지는 처음부터 모든 문서를 로딩하지 않고 스크롤을 내리면 이후 문서가 로딩되는 동적 페이지이다.
페이지 스크롤 및 동적 페이지 스크롤 방법은 아래와 같다.
from selenium import webdriver
# from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Chrome()
driver.get('https://shopping.naver.com/')
# 검색창에 검색어 입력
elem = driver.find_element_by_xpath('//*[@id="autocompleteWrapper"]/input[1]')
elem.send_keys('선풍기')
# 검색창에서 enter 눌러 검색 실행
# elem.send_keys(Keys.ENTER)
# 대기
driver.implicitly_wait(10)
# 검색 버튼 클릭
elem = driver.find_element_by_xpath('//*[@id="autocompleteWrapper"]/a[2]')
elem.click()
# 대기
driver.implicitly_wait(10)
# 스크롤 다운
# 1. 지정한 위치로 스크롤 다운 (세로 1080만큼 다운)
driver.execute_script('window.scrollTo(0, 1080)')
# 2. 페이지 하단으로 스크롤 다운
# end키와 동일하게 작동하며 동적 스크롤 페이지에서는 스크롤 하단으로 내려도 다시 스크롤 생김
driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')
# 3. 따라서 현재 문서의 높이를 구해 높이가 0일때까지 2초 간격으로 스크롤 내림
# 현재 문서 높이 구하기
prev_height = driver.execute_script('return document.body.scrollHeight')
while True:
# 스크롤 내리기
driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')
# 페이지 로딩 대기
# 페이지 로딩 대기가 적용이 안되는 곳이 있다. 이때는 sleep를 준다.
# driver.implicitly_wait(10)
time.sleep(3)
# 현재 문서 높이 구하기
current_height = driver.execute_script('return document.body.scrollHeight')
# 이전 높이와 현재 높이의 변화가 없다면 페이지 맨 하단
if prev_height == current_height:
break
# 현재 높이를 이전 높이로 저장
prev_height = current_height
# 대기
driver.implicitly_wait(10)
# 스크롤 맨 위로 올리기
driver.execute_script('window.scrollTo(0, 0)')
===================================================================
특정 영역의 원하는 Element가 있는 곳까지 스크롤
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
driver.get('https://www.w3schools.com/html/')
driver.maximize_window()
driver.implicitly_wait(10)
# 목적지 Element
elem = driver.find_element_by_xpath('//*[@id="leftmenuinnerinner"]/a[61]')
# 목적지 Element까지 이동
# 방법1
actions = ActionChains(driver)
actions.move_to_element(elem).perform()
# 방법2
xy = elem.location_once_scrolled_into_view
elem.click()
'RPA > Python' 카테고리의 다른 글
[selenium] 파일 다운로드 경로 변경 (0) | 2021.05.06 |
---|---|
[selenium] 페이지 로딩까지 대기 (0) | 2021.05.06 |
[selenium] iframe 내 Element 접근 (checkbox, radio, select 태그) (0) | 2021.05.06 |
[selenium] Xpath 등을 이용하여 Element 동작 처리하기 (0) | 2021.05.05 |
[selenium] Headless로 처리하기 (0) | 2021.05.05 |