[JAVA #11] [Web Automation #11] Controlling STEEMIT web pages with Selenium #9 Scroll [KR]

redsjavahouse1591357_1280.jpg
image source: pixabay


selenium에는 스크롤을 직접적으로 제어하는 메서드가 존재하지 않는다.
대신 JavascriptExecutor 인터페이스로 제어 가능한데 이 아이는 selenium에서 구현하기 어려운 부분을 자바스크립트코드로 제어하는 아주 막강한 아이다.
javascript로 구현할 수 있는 모든 기능을 제어할 수 있을 것으로 보인다.
오늘은 그 중 페이지 스크롤 제어법을 몇가지 알아본다. javascript를 잘 알면 더 쉽게 사용할 것 같다.(자바스크립트 다시 시작해야 하나?)

JavascriptExecutor는 WebDriver의 구현 클래스인 RemoteWebDriver 클래스가 구현을 마무리한 것으로 driver 변수를 캐스팅해서 인스턴스 생성할 수 있고, executeScript()메서드로 제어 가능하다. 인자는 두가지이고 첫 인자에는 javascript코드를 String으로 입력할 수 있고, 두번째 인자는 Object를 사용하되 가변인자이므로 넣지 않아도 무방하다. 👇

JavascriptExecutor je = (JavascriptExecutor) driver;
je.executeScript("window.scrollTo(0, 1000)");

아래와 같은 여러가지 방법으로 스크롤을 제어할 수 있다.

1. javascript의 window scrollTo, scrollBy로 제어

👇인자는 x좌표, y좌표로 입력가능하므로 가로/세로 스크롤을 제어할 수 있다.

je.executeScript("window.scrollTo(0, 1000)");

👇변수를 사용하여 조금 변형시키면 아래와 같다. (javascript로 스크롤 영역의 높이를 불러와서 y좌표에 입력한다. 즉 맨하단으로 스크롤이다.)

je.executeScript("window.scrollTo(0, document.body.scrollHeight)");

👇 혹은 스크롤의 현재 위치의 y좌표값을 불러와 y인자에 그 위치를 기준으로 +-알파값을 입력하는것이다.

je.executeScript("window.scrollTo(0, window.scrollY + 700)");
2.특정 태그로 스크롤

👇 javascript로 직접 택그를 찾아 scrollIntoView() 메서드로 태그의 위치로 스크롤할 수 있다.

je.executeScript("document.getElementById('content').scrollIntoView(true)");

👇 혹은 selenium으로 태그를 찾은 후 executeScript의 두번째 인자에 태그를 넣어 사용할 수도 있다.

WebElement ele = driver.findElements(By.id("posts_list")).get(0);
je.executeScript("arguments[0].scrollIntoView()",ele );
3. 키보드의 키로 제어

👇 키보드의 home/end 키 혹은 방향키로 제어가 가능하다. sendkeys()메서드로 키보드 키 호출이 가능하고, 태그는 html 태그를 설정하면 된다.

WebElement html = driver.findElement(By.tagName("html"));
html.sendKeys(Keys.HOME);
html.sendKeys(Keys.PAGE_DOWN);

위 코드를 모두 적용해 보았는데 정상적으로 동작한다. 개인적으로 2번이 가장 사용하기 좋을 것 같다.

package com.steem.webatuo;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.Wait;
import org.openqa.selenium.support.ui.WebDriverWait;

import io.github.bonigarcia.wdm.WebDriverManager;

public class Steemit {
    
    public static void main(String[] args) throws InterruptedException {
        WebDriverManager.chromedriver().setup();
        WebDriver driver = new ChromeDriver();
        driver.get("https://steemit.com");
        
        Wait<WebDriver> wait = new WebDriverWait(driver, 10);

        Thread.sleep(2000);
        JavascriptExecutor je = (JavascriptExecutor) driver;
        je.executeScript("window.scrollTo(0, document.body.scrollHeight)");
        
        Thread.sleep(2000);
        je.executeScript("window.scrollTo(0, window.scrollY + 700)");
        
        Thread.sleep(2000);
        je.executeScript("document.getElementById('content').scrollIntoView(true)");
        
        Thread.sleep(2000);
        je.executeScript("window.scrollBy(0, document.body.scrollHeight)");
        
        Thread.sleep(2000);
        WebElement html = driver.findElement(By.tagName("html"));
        html.sendKeys(Keys.HOME);

        Thread.sleep(2000);
        html.sendKeys(Keys.PAGE_DOWN);
        
        Thread.sleep(2000);
        WebElement ele = driver.findElements(By.id("posts_list")).get(0);
        je.executeScript("arguments[0].scrollIntoView()",ele );
        driver.quit();
    }

}

.
.
.
.
[Cookie 😅]
Seleniun java lib version: 3.141.59
java version: 13.0.1



0
0
0.000
8 comments
avatar

@tipu curate 2

Posted using Partiko Android

0
0
0.000
avatar

According to the Bible, Are you one of the apostles of Jesus? Why do you preach?

Watch the Video below to know the Answer...

(Sorry for sending this comment. We are not looking for our self profit, our intentions is to preach the words of God in any means possible.)


Comment what you understand of our Youtube Video to receive our full votes. We have 30,000 #SteemPower. It's our little way to Thank you, our beloved friend.
Check our Discord Chat
Join our Official Community: https://steemit.com/created/hive-182074

0
0
0.000