SeleniumをSelenium-Serverで起動させる  browsers_remote

リファレンス

 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をダウンロードします。

selenium-server-standalone-2.47.1.jar をクリック

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

実行結果が以下の状態です。

スクリーンショット参照元:https://ja.wikipedia.org/wiki/Main_Page

 因みに、バージョン4.7.2でブラウザ起動した場合、画面スクリーンショットの取得に失敗し、灰色の画像を取得しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

VBAを中心とした自動化、効率化の手法を紹介しています。現在は、SeleniumBasicのexamplesを紹介しています。その内、SeleniumBasic以外の手法も掲載したいと思っております。

目次