Selenium × SpringBoot ブラウザ自動操作
Seleniumを使うとブラウザ操作を自動化させることができる
その基本操作を解説する
Seleniumの公式ページはこちら
Selenium
良く使う基本操作はこちら
Seleniumの基本操作
■環境
OS:Windows
ブラウザ:Google Chrome
言語:Java11
フレームワーク:SpringBoot
ビルドツール:Gradle
■①プロジェクト作成
※パッケージ名は「com.example」とする
下記依存関係を設定したSpringBootプロジェクトを作成する
【依存関係】
・Spring Boot Dev Tools
・Lombok
・Thymeleaf
・Spring Web
■②Seleniumの依存関係を追加
Maven Repositoryから「Selenium Java」を取得
今回はバージョン3.141.59を使用する
build.gradleに下記を追記
implementation 'org.seleniumhq.selenium:selenium-java:3.141.59'
■③Chrome Driverをダウンロード
ドライバーはブラウザのバージョンに合ったものにする
Google Chromeのバージョンを確認
「設定」⇒「Chromeについて」から確認できる
下記からChrome Driverをダウンロード
Windows64bit場合も32bitバージョンで動作する
ダウンロード後、解凍したexeファイルを任意のフォルダに格納
今回はCドライブ直下に「ChromeDriver87.0.4280.20」フォルダを作成して、そこに格納する
後ほど使用するのでパスを控えておく
■④Javaファイルを編集
メインクラスからコントローラークラスを呼び出し、ブラウザ操作を行う流れで作成する
1.メインクラスとなる「SeleniumSampleApplication.java」を編集する
・SeleniumSampleApplication.java
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import com.example.controller.SearchController;
@SpringBootApplication
public class SeleniumSampleApplication {
public static void main(String[] args) {
//DIコンテナ本体⇒ApplicationContext
ApplicationContext context = SpringApplication.run(SeleniumSampleApplication.class, args);
//getBean()メソッドでSearchController型のインスタンスを取得
SearchController searchController = context.getBean(SearchController.class);
//実行結果を戻り値retCdにセット
boolean retCd = searchController.index();
}
}
2.ブラウザ操作を行うコントローラークラスを作成する
SearchController.java
package com.example.controller;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeDriverService;
import org.springframework.stereotype.Controller;
@Controller
public class SearchController {
/***
* ブラウザ操作処理
* @return
*/
public boolean index() {
//処理結果フラグ
boolean retCd = false;
//Chromeドライバーを格納したパスをシステム変数にセット
System.setProperty(ChromeDriverService.CHROME_DRIVER_EXE_PROPERTY, "C:/ChromeDriver87.0.4280.20/chromedriver.exe");
//Chromeドライバーのインスタンス
WebDriver driver = new ChromeDriver();
//暗黙的な待機の設定(ブラウザ操作時の要素を見つけるまで最大5秒待つ)
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
try {
//乗換案内にアクセス
driver.get("https://transit.yahoo.co.jp/");
//テキストボックス(出発)に「東京」と入力
driver.findElement(By.id("sfrom")).sendKeys("東京");
//テキストボックス(出発)に「東京」と入力
driver.findElement(By.id("sto")).sendKeys("京都") ;
//検索ボタンを押下
driver.findElement(By.id("searchModuleSubmit")).click();
//検索結果から優先順位順の乗換案内情報を取得
WebElement element = driver.findElement(By.className("navPriority"));
//発着時刻など、時間に関する情報を取得(複数存在する為、List型にする)
List<WebElement> el = element.findElements(By.className("time"));
//時間に関する情報をループ
el.forEach(e -> {
//時間に関する情報をテキストで取得し、コンソールに出力
System.out.println(e.getText());
});
//処理結果フラグ
retCd = true;
} catch(Exception e) {
System.out.println(e.getMessage());
} finally {
//セッションの終了時にブラウザーを終了
driver.quit();
}
return retCd;
}
}