JavaとSeleniumでWebページをスクロールダウンする方法【JavascriptExecutor活用】
SeleniumでJavaを使ってWebページを下にスクロールさせる方法を解説します。実はSelenium自体にはスクロールを直接制御する機能が備わっていません。そのため、JavascriptExecutorの力を借りて、目的の要素までスクロール操作を実行することになります。
スクロールの基本的な仕組み
まず、スクロール先となる要素を特定(ロケート)します。次に、JavascriptExecutorを使用してJavaScriptのコマンドを実行します。SeleniumではexecuteScriptメソッドを使うことでJavaScriptコマンドを実行できます。
具体的には、JavaScriptのscrollIntoViewメソッドを利用し、引数としてtrueを渡すことで、指定した要素が画面上に表示されるまでページをスクロールさせます。
構文
WebElement elm = driver.findElement(By.name("name"));
((JavascriptExecutor) driver)
.executeScript("arguments[0].scrollIntoView(true);", elm);実装例
以下は、Firefoxブラウザで実際に動作するサンプルコードです。「Contact」というテキストを持つ要素を検索し、その要素まで自動的にスクロールしています。
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.JavascriptExecutor;
public class ScrollAction {
public static void main(String[] args) {
// Geckoドライバーのパスを設定
System.setProperty("webdriver.gecko.driver",
"C:\\Users\\ghs6kor\\Desktop\\Java\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
// 暗黙的待機(implicit wait)を設定
driver.manage().timeouts().implicitlyWait(4, TimeUnit.SECONDS);
// アプリケーションを起動
driver.get("https://www.tutorialspoint.com/about/about_careers.htm");
// スクロール対象の要素を特定
WebElement n = driver.findElement(
By.xpath("//*[text()='Contact']"));
// JavascriptExecutorでscrollIntoViewを実行
((JavascriptExecutor) driver)
.executeScript("arguments[0].scrollIntoView(true);", n);
}
}コードのポイント解説
- System.setProperty: geckodriver.exeのパスを指定し、Firefoxドライバーを有効化します。
- implicitlyWait: 要素が見つかるまで最大4秒間待機する設定で、要素読み込みのタイミングずれによるエラーを防ぎます。
- findElement + By.xpath: テキスト「Contact」に一致する要素をXPathで検索します。
- executeScript: arguments[0]には第2引数で渡したWebElement(ここでは変数n)が対応し、その要素に対してscrollIntoView(true)が適用されます。
実行結果
このコードを実行すると、Firefoxが起動して対象ページが読み込まれ、ページが自動的に下方向へスクロールされ、「Contact」リンクが画面内に表示された状態になります。
なお、scrollIntoViewの引数をfalseにすると、要素がビューポートの下端に揃うようにスクロールされます。用途に応じて使い分けるとよいでしょう。
-
JavaとOpenCVで長方形を描画する方法|Imgproc.rectangle()の使い方を徹底解説
Java用OpenCVライブラリの org.opencv.imgproc パッケージには、Imgproc クラスが含まれています。画像に長方形を描画するには、このクラスが提供する rectangle() メソッドを使用します。 このメソッドは以下のパラメータを受け取ります。 Matオブジェクト:長方形を描画する対象となる画像を表します。 Pointオブジェクト(2つ):描画する長方形の対角となる2つの頂点座標を表します。 Scalarオブジェクト:長方形の色をBGR形式で指定します。 整数値:長方形の枠線の太さを指定します(デフォルト値は1)。 サンプルコード 以下は、白紙の画像に長方形を
-
JavaとOpenCVで線を描画する方法をわかりやすく解説
Java版OpenCVライブラリのorg.opencv.imgprocパッケージには、Imgprocというクラスが含まれています。画像に直線を描画するには、このクラスが提供するline()メソッドを呼び出します。 line()メソッドのパラメータ line()メソッドは、以下のパラメータを受け取ります。 Matオブジェクト ― 直線を描画する対象となる画像を表します。 Pointオブジェクト2つ ― 直線の始点と終点の座標を表します。 Scalarオブジェクト ― 直線の色をBGR形式で指定します。 整数値 ― 直線の太さを指定します(デフォルト値:1)。 サンプルコード 以下は、白紙の画