プログラミング逆引き辞典

~ 多言語対応のプログラミングレシピ ~

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をダウンロード

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;
    }

}