ในบทความนี้ เราจะเรียนรู้วิธี 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)