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サイトを開くことができました。
正直、findElement
も sendKeys
も click
もしていないので、対象のWebページを操作しているという感じでもないですが、
とりあえず Selenium の基本の基本ということで。