Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

วิธี Scroll Down 網頁ใน Selenium ด้วย Java (JavascriptExecutor)

ในบทความนี้ เราจะเรียนรู้วิธี Scroll Down (เลื่อนหน้าจอลง) ใน Selenium WebDriver ด้วย Java โดยใช้ JavascriptExecutor

เหตุผลที่ต้องใช้ JavascriptExecutor

Selenium ไม่มีคำสั่ง Scroll ตรงๆ ต้องใช้ JavaScript ผ่าน JavascriptExecutor Interface

Syntax หลัก

// Scroll ไปยัง Element เป้าหมาย
WebElement element = driver.findElement(By.locator("value"));
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);

// Scroll ลงจำนวน Pixel ที่กำหนด
((JavascriptExecutor) driver).executeScript("window.scrollBy(0, 500);");

// Scroll ไปสุดหน้า (Bottom)
((JavascriptExecutor) driver).executeScript("window.scrollTo(0, document.body.scrollHeight);");

// Scroll ไปบนสุด (Top)
((JavascriptExecutor) driver).executeScript("window.scrollTo(0, 0);");

// Scroll แบบ Smooth
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView({behavior: 'smooth', block: 'center'});", element);

ตัวอย่างโค้ดสมบูรณ์: Scroll ไปยัง Element "Contact"

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.JavascriptExecutor;
import java.util.concurrent.TimeUnit;

public class ScrollAction {
    public static void main(String[] args) {
        System.setProperty("webdriver.gecko.driver", "C:\\path\\to\\geckodriver.exe");

        WebDriver driver = new FirefoxDriver();
        driver.manage().timeouts().implicitlyWait(4, TimeUnit.SECONDS);

        // เปิดเว็บไซต์
        driver.get("https://www.tutorialspoint.com/about/about_careers.htm");

        // หา Element เป้าหมาย
        WebElement contactElement = driver.findElement(By.xpath("//*[text()='Contact']"));

        // Scroll ไปยัง Element
        ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", contactElement);

        // Optional: Highlight Element
        ((JavascriptExecutor) driver).executeScript("arguments[0].style.border='3px solid red'", contactElement);

        // ปิด Browser
        driver.quit();
    }
}

เมธอด Scroll ที่ใช้บ่อย

JavaScriptคำอธิบาย
scrollIntoView(true)เลื่อนให้ Element อยู่บนสุด Viewport
scrollIntoView(false)เลื่อนให้ Element อยู่ล่างสุด Viewport
scrollBy(x, y)เลื่อน Relative จากตำแหน่งปัจจุบัน
scrollTo(x, y)เลื่อนไปตำแหน่ง Absolute
scrollTopตำแหน่ง Scroll ปัจจุบัน (Read)

การ Scroll แบบ Infinite Scroll (โหลดข้อมูลเพิ่ม)

// Scroll จนถึงท้ายหน้า แล้วรอโหลดข้อมูล
JavascriptExecutor js = (JavascriptExecutor) driver;
long lastHeight = (Long) js.executeScript("return document.body.scrollHeight");

while (true) {
    js.executeScript("window.scrollTo(0, document.body.scrollHeight);");
    Thread.sleep(2000); // รอโหลด

    long newHeight = (Long) js.executeScript("return document.body.scrollHeight");
    if (newHeight == lastHeight) break; // ไม่มีข้อมูลเพิ่ม
    lastHeight = newHeight;
}

ข้อควรระวัง

  • Element ต้อง Attached ใน DOM (ไม่ได้ display:none)
  • บางเว็บมี Sticky Header ใช้ scrollIntoView({block: 'center'}) แทน
  • หลัง Scroll ควร Wait ให้ Element พร้อม (Explicit Wait)