본문 바로가기

자동화/Selenium

Selenium Python 웹 자동화시 사용하는 스크롤 동작 유형 4가지

728x90

Selenium 웹페이지 자동화를 구현하다보면 스크롤 기능을 자주 사용하게 됩니다.
다양한 스크롤 구현 방법 제가 자주 사용하는 방법 4가지를 설명하려고 합니다.

 

1. execute_script("window.scrollTo(x, y);")


JavaScript 형식 코드 중 window.scrollTo 코드를 사용하여 스크롤을 하는 방식입니다.

x, y 좌표를 숫자를 통해 원하는 위치로 스크롤을 하거나
document.body.scrollHeight를 y 좌표에 작성시 최하단까지 스크롤을 한번에 할 수 있습니다.

하지만 웹페이지 내 iframe 및 페이지 내 페이지 코드로 작성 등 다양한 경우에서 동작을 하지 않는 단점이 있습니다.
(특정 iframe 위치로 이동하여 동작되는 경우도 있는데 안되는 경우도 있습니다...)

 

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

driver.execute_script("window.scrollTo(0, 1000);")

 

2. ActionChains > move_to_element


actionChains 내 move_to_element를 사용하여 해당 element가 있는 곳까지 위치를 이동시켜 스크롤 하는 방식입니다.
해당 element를 찾을 수 있는 경우 편리하게 스크롤을 할 수 있습니다.

하지만 element를 인식하지 못하거나 없는 경우 특정 위치로 이동할 수 없는 단점이 있습니다.

 

from selenium.webdriver import ActionChains

action = ActionChains(driver)
action.move_to_element(driver.find_element(By.ID, 'footer')).perform()

naver.com 메인 내 최하단으로 스크롤하는 코드

 

3. pyautogui.press


pyautogui 내 press 기능을 사용하여 키보드를 자동으로 입력하게 해주어 스크롤을 하는 방식입니다.
end 키를 이용하여 한번에 스크롤을 최하단까지 할 수도 있고 pagedown으로 약간만 스크롤을 할 수도 있습니다.

element가 없어도 사용할 수 있으며 window.scrollTo 코드가 잘 안되는 경우 사용할 수 있습니다.

 

import pyautogui

pyautogui.press('end')
pyautogui.press('pagedown')

 

4. ActionChains > drag_and_drop


ActionChain 내 drag_and_drop를 사용하여 스크롤 동작을 유도하는 방법입니다.

마우스 시작 위치를 찍을 drag element와 이동하려고 하는 drop element를 지정하여 drag - drop 동작을 사용하면 해당 위치로 스크롤 되는 효과를 볼 수 있습니다.

위에서 소개한 1~3번 동작 모두 동작을 하지 않는 경우에 시도해볼 수 있는 방법입니다.
(제가 경험했을 때 웹페이지내 표가 있고 표를 스크롤하기 위한 방법으로 사용했을 때 해당 방법으로 성공하였습니다.)

 

from selenium.webdriver import ActionChains

action = ActionChains(driver)

drag = driver.find_element(By.ID, 'newsstand')
drop = driver.find_element(By.ID, 'themecast')

action.drag_and_drop(drag, drop).perform()

naver.com 메인 화면 내 주제판 위치로 이동시키는 코드



제가 구현해본 자동화에서는 1~4번 동작 중 최소 1개 이상은 스크롤 동작이 되어서 스크롤 자동화를 구현할 수 있었는데요.
자동화를 구현하시는 모든 분들도 사용해보시고 자신만의 스크롤 방식을 찾으시길 바랍니다.

 

728x90