browsers_remoteモジュールの内容解説と利用方法について説明します。
browsers_remoteは、Selenium-Server(Selenium Grid)をインストールしたマシンをリモートで起動させるコードになっていました。Examplesは、リモートマシンと自PCが同一で動作せています。今回は、WindowsPCを2台用意し、1台目にSelenium-Serverをインストールし、2台目のPCからSeleniuBasicで1台目PCのSelenium-ServerでChromeを起動させます。
PC1:Win11Pro(Selenium-Server Standalone)
PC2:Win10Pro(SeleniumBasic)
※PC1とPC2は同一のプライベートネットワーク内でセッティングしています。
Examplesは、StandaloneでSelenium-Serverを利用しています。Seleniumの正式な使い方はブラウザテストの自動化ですので、ハブ用のマシンから各デバイス(ノード)のブラウザを一気に起動させることができる様です。
Seleniumの開発ページ(日本語)では、Standaloneの主な用途が以下の様に紹介されていました。
・RemoteWebDriver を使用したローカルでの開発やデバッグ
・コードをプッシュする前の簡易なテスト実行
・CI/CD 向けの Grid のセットアップ(GitHub Actions, Jenkins など)
出典:https://www.selenium.dev/ja/documentation/grid/getting_started/#ハブ
StandaloneでSelenium-Serverを利用するメリットは、Seleniumを複数デバイスで利用している場合、1台で済む事にあります。つまり、Webdriverの更新がSelenium-ServerがインストールされているPC1台で済むことにあります。
逆にデメリットとしては、サーバーマシン(PC1)側を常時起動させ、アプリを起動し続けなければなりません。物理的に離れた場所のリモートマシンを操作する場合、サーバーマシンの動作状況を確認できません。あとは、PC2でブラウザ操作中にSelenium以外のコマンド(SendKeysメソッドやAutoit)を利用した場合、そのメソッドはPC1ではなくPC2で動作してしまうと思います。
Examplesは、スクリーンショットをExcelシートに張付けるコードだったのですが、記事作成時点のSelenium Serverのバージョン(4.7.2)では残念ながら今回の方法でコード実行しても、スクリーンショットが上手く取得できませんでした。最後にコード実行結果を紹介しておきます。バージョン4.7.2でもオブジェクトの取得自体はできる様で、試しにウィンドウタイトルを取得したところ、無事取得できました。
SeleniumBasic自体が2016年から更新されていませんので、現在も更新し続けているSelenium-Serverでは上手く動作しない内容があるかもしれません。Examplesで採用されているバージョンは2.47.1でしたので今回はバージョン2.47.1を利用します。
- 利用目的は業務効率化です。(テスト自動化ではありません)
- ブラウザはGoogleChromeが対象です。(EdgeやFirefoxは対象外)
- 原文のVBAでは現在エラー発生する場合が多いため、修正を加えてます。
Examples.xlsmの保存場所(ここをクリック)
Examples.xlsmが保存されている場所は、SeleniumBasicがインストールされているサブフォルダ内になります。SeleniumBasicのインストール完了時に保存フォルダを確認することができます。ただ、大体以下フォルダのどちらかにファイル保存されています。
- C:\Program Files\Seleniumbasic\Examples\Excel
- shell:Local AppData\SeleniumBasic\Examples\Excel
PC1側作業
Java SE Development Kit 8のインストール
Selenium-Serverは、Javaで動作していますので、Javaの開発キットをインストールします。
他ホームページを参考にさせてもらい、2023年1月現在、サポート対象のJava SE Development Kit 8をダウンロードしたいと思います。
https://www.oracle.com/java/technologies/downloads/#java8-windows
OSは、Win10以降64bitですので64bitを選択します。ダウンロードするためには、Oracleのプロファイル登録(無料)を事前にしておく必要があります。プロファイル作成手順は、Oracleホームページに掲載されています。記事作成時点では、jdk-8u351-windows-x64.exeという実行ファイルがダウンロードされました。ダウンロード後、ファイル実行し、手順に従いインストール作業を完了させます。
インストールが完了したらファイヤーウォールの設定がでてきますので、プライベートネットワークでの通信許可をしておきます。パブリックネットワークのチェックボックスは外しておきます。アクティブディレクトリ傘下の場合、ドメインネットワークのチェックボックスも現れるかと思いますが、その場合はドメインネットワークの項目にチェックしておけばOKです。
インストール作業が完了したら、コマンドプロンプトを開き、java -versionを入力、エンターし、Javaの動作確認をしておきます。
c:\>java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) Client VM (build 25.211-b12, mixed mode)
Selenium-Serverのダウンロード
Selenium-Serverは、以下Selenium開発ホームページからダウンロードします。
投稿時点の最新バージョンは4.7.2ですが、今回はダウングレードします。ページを下へスクロールすると、Previous Releasesが出てきますので、releasesをクリックし、過去のアーカイブからバージョン2.47.1をダウンロードします。
ダウンロードしたJavaファイルを適当なフォルダに保存します。今回は、以下フォルダにしました。
C:\SeleniumServer\selenium-server-standalone-2.47.1.jar
ChromeDriverのダウンロード
Chromedriverのダウンロードページから最新のChromedriverをダウンロードします。
ダウンロード先は以下参照ください。
ダウンロードしたChromedriverは、Selenium-Serverを保存しているフォルダに保存します。
C:\SeleniumServer\chromedriver.exe
Selenium-Serverのサービス開始
Selenium-Serverのサービスを開始するため、コマンドプロンプトを開き、以下コードを実行します。コマンドプロンプトは、Windowsホーム画面の検索欄にcmdと打てばコマンドプロンプトが検索ヒットします。
java -Dwebdriver.chrome.driver=C:\SeleniumServer\chromedriver.exe -jar C:\SeleniumServer\selenium-server-standalone-2.47.1.jar
-Dwebdriver.chrome.driverでchromedriver.exeを指定します。
-jarでselenium-server.jarファイルを指定します。
ここで、chromedriverを指定しないとエラーが発生します。(以下エラー文)
The path to the driver executable must be set by the webdriver.chrome.driver system property;
for more information, see https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver.
The latest version can be downloaded from
http://chromedriver.storage.googleapis.com/index.html
最新バージョンの4.7.2の場合、jarファイルと同様のフォルダにchromedriver.exeが保存されていれば、-Dwebdriver.chrome.driverでわざわざdriverを指定する必要はありません。jarの呼び出し方も2,47.1と少し違いますのでご注意ください。気になる方は、Getting started with Selenium Gridのページを参照ください。
実行後、コマンドプロンプトでサービス開始の通知が出されます。
c:\>java -Dwebdriver.chrome.driver=C:\SeleniumServer\chromedriver.exe -jar C:\SeleniumServer\selenium-server-standalone-2.47.1.jar
21:26:23.417 INFO - Launching a standalone Selenium Server
21:26:23.808 INFO - Java: Oracle Corporation 25.351-b10
21:26:23.808 INFO - OS: Windows 10 10.0 amd64
21:26:23.823 INFO - v2.47.1, with Core v2.47.1. Built from revision 411b314
21:26:24.091 INFO - Driver class not found: com.opera.core.systems.OperaDriver
21:26:24.091 INFO - Driver provider com.opera.core.systems.OperaDriver is not registered
21:26:24.516 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub
21:26:24.516 INFO - Selenium Server is up and running
ここでコマンドプロンプトを閉じれば、サーバーもサービス終了します。バックグラウンドで実行しておきたい場合やWindows立上げ時にアプリ起動したい場合もあるかと思いますが、その場合は以下の様な記事が参考になるかと思います。
PC2側作業
SeleniumBasicでbrowsers_remoteを実行
PC2にてExcelを開き、以下VBAを実行します。コード欄の<PC1のプライベートIPアドレス>にPC1のプライベートIPアドレスを入力します。
PC1のプライベートIPアドレスは、PC1のネットーワーク設定から確認することができます。又は、新たにコマンドプロンプトを開いて、ipconfigと入力し、エンターすれば、Ipv4アドレス項目にプライベートIPアドレスが表記されています。プライベートアドレスは、ルータからDHCPサーバで割り当てられているアドレスか、手動設定している場合は、固定のプライベートIPアドレスが表記されるはずです。
今回は、PC2からPC1のSelenium-Serverを起動させますが、PC2自身でPC2のSelenium-Serverを起動させることもできます。その場合は、プライベートアドレスをローカルループバックアドレスの127.0.0.1かlocalhostにします。
Sub SeleniumServer_Take_ScreenShot()
Dim SERVER As String: SERVER = "http://<PC1のプライベートIPアドレス>:4444/"
Dim driver As New WebDriver
driver.StartRemotely SERVER, "chrome"
driver.Get "https://ja.wikipedia.org/wiki/Main_Page"
driver.TakeScreenshot().ToExcel Sheet1.Range("A7")
Stop
driver.Quit
End Sub
実行結果が以下の状態です。
因みに、バージョン4.7.2でブラウザ起動した場合、画面スクリーンショットの取得に失敗し、灰色の画像を取得しています。