覚えたら書く

IT関係のデベロッパとして日々覚えたことを書き残したいです。twitter: @yyoshikaw

Selenium - WebDriverを使用してWebサイトへアクセスする(Java + Chrome)

Selenium の WebDriver(ChromeDriver) で Weサイトへアクセスするサンプルです。

Selenium といえば、Python を利用している例をよく目にしますが、ここでは Java の例となっています。


前提条件

実行環境に ChromeDriver がインストールされており、Pathに追加されている前提としています。


Javaライブラリの準備

pom.xml に以下のように selenium-java の依存関係 を追記します。

    <dependencies>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.1.2</version>
        </dependency>

    </dependencies>

本サンプルでは バージョン 4.1.2 を指定しています。


ソースコード例

全てヘッドレスモードにはしていません

とりあえずWebサイトをChromeで開く

ChromeDriver で、この Blog の URL を開くという単純なサンプルです。

■ソースコード例

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class OpenBrowser {

    public static void main(String[] args) {
        // これでブラウザが開く
        WebDriver driver = new ChromeDriver();

        // 指定のURLにアクセスする(開く)
        driver.get("https://blog.y-yuki.net/");

        // 画面を一定時間表示させるために仮で 5000 ミリ秒 sleepしている(ここは本筋と関係ない部分です)
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
        }

        // WebDriverの終了(Webブラウザが閉じる)
        driver.quit();
    }
}

ChromeDriver のインスタンス化 で Webブラウザが起動し、WebDriver.get で 指定のURL へアクセスします。


オプションを指定してWebサイトをChromeで開く

ChromeOptions で、いくつかオプションを指定してこの Blog の URL を開くというサンプルです。

■ソースコード例

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

import java.time.Duration;
import java.util.HashMap;
import java.util.Map;

public class OpenBrowser3 {

    public static void main(String[] args) {

        ChromeOptions options = new ChromeOptions();

        // "Chromeは自動テストソフトウェアによって制御されています" の表示を消す
        options.setExperimentalOption("excludeSwitches", new String[] { "enable-automation" });

        // パスワード保存のポップアップを表示しないようにする
        Map<String, Object> prefs = new HashMap<>();
        prefs.put("credentials_enable_service", false);
        prefs.put("profile.password_manager_enabled", false);
        options.setExperimentalOption("prefs", prefs);

        // "この接続ではプライバシーが保護されません" を突破するためのオプション
        options.setCapability("acceptInsecureCerts", true);

        // これでブラウザが開く
        WebDriver driver = new ChromeDriver(options);

        driver.manage().window().maximize();    // ブラウザの最大化
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));  // 要素が見つかるまでの待機時間

        // 指定のURLにアクセスする(開く)
        driver.get("https://blog.y-yuki.net/");

        // 画面を一定時間表示させるために仮で 5000 ミリ秒 sleepしている(ここは本筋と関係ない部分です)
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
        }

        // WebDriverの終了(Webブラウザが閉じる)
        driver.quit();
    }
}
  • コード中にコメントしていますが、以下のオプションを指定しています。
    • "Chromeは自動テストソフトウェアによって制御されています" を Webブラウザ上に表示しないようにしています
    • パスワード保存のポップアップを表示しないようにしています
    • 自己証明書を使用しているWebサイトへアクセスした際の "この接続ではプライバシーが保護されません" を突破するようにしています

(ただし、これらのオプションは今回アクセスしているURLではほとんど意味をなしていません)


まとめ

とりあえず、ChromeDriverを利用して Webサイトを開くことができました。

正直、findElementsendKeysclick もしていないので、対象のWebページを操作しているという感じでもないですが、
とりあえず Selenium の基本の基本ということで。