usage_authenticationでは、認証用のダイアログボックス(Basic認証)の利用方法を紹介しています。認証用のページは、ここを参照しています。認証ダイアログボックスのイメージ例は以下のとおりです。
- 利用目的は業務効率化です。(テスト自動化ではありません)
- ブラウザはGoogleChromeが対象です。(EdgeやFirefoxは対象外)
- 原文のVBAでは現在エラー発生する場合が多いため、修正を加えてます。
Examples.xlsmの保存場所(ここをクリック)
Examples.xlsmが保存されている場所は、SeleniumBasicがインストールされているサブフォルダ内になります。SeleniumBasicのインストール完了時に保存フォルダを確認することができます。ただ、大体以下フォルダのどちらかにファイル保存されています。
- C:\Program Files\Seleniumbasic\Examples\Excel
- shell:Local AppData\SeleniumBasic\Examples\Excel
Basic認証 成功例
Examplesに掲載された内容で認証に成功した事例を紹介します。
URLにIDとPasswordを直接入力する
URLにIDとPasswordを直接入力する方法を紹介します。現在、SeleniumBasicで認証する場合、多く採用されている方法になります。この方法ではダイアログボックスは出現しません。
Private Sub BasicAuth_InURL()
Dim driver As New ChromeDriver
Dim Assert As New Assert
driver.Get "https://guest:password@labs.w0s.jp/http/authorization/basic/"
Dim txt As String: txt = driver.FindElementByCss("body > h1").Text
Assert.Matches "Basic", txt '部分一致でAssertが通る
Assert.Equals "Basic Authorization Demo", txt '完全一致でAssertが通る
Stop
driver.Quit
End Sub
3行目の元URLは、"https://@labs.w0s.jp/http/authorization/basic/"です。
IDとPasswordを以下の順にURLに挿入します。
"https://<ID>:<password>@labs.w0s.jp/http/authorization/basic/"
上記URLでページ変遷すると認証付でページを取得します。
以下、各行の説明です。
4行目:ページ取得後の文字列を取得(txt = "Basic Authorization Demo")
5行目:Assert.Matchesでtxtが予定していた文字列になっているか確認。(部分一致検索)
6行目:Assert.Equalsでtxtが予定していた文字列になっているか確認。(完全一致検索)
WScript.Shellで認証情報を入力する
この方法は、認証ダイアログボックスを出現させた後、RPAの様な要領でWScript.Shellで認証情報を入力していきます。
Private Sub AutDlg_WScript()
Dim driver As New ChromeDriver
Dim Assert As New Assert
driver.Get "https://labs.w0s.jp/http/authorization/basic/"
driver.Wait 3000
Dim wsh As Object: Set wsh = CreateObject("WScript.Shell")
wsh.SendKeys "guest"
wsh.SendKeys "{TAB}"
wsh.SendKeys "password"
wsh.SendKeys "{ENTER}"
Dim txt As String: txt = driver.FindElementByCss("body > h1").Text
Assert.Matches "Basic", txt '部分一致でAssertが通る
Assert.Equals "Basic Authorization Demo", txt '完全一致でAssertが通る
Stop
driver.Quit
End Sub
以下、各行の説明です。
3行目:認証ダイアログボックスを出現させる。
4行目:通信状態により、ダイアログボックスが出現する前に入力開始しない様、簡易的にwait処理
5~9行目:WScript.Shellで認証情報を入力。
10行目:ページ取得後の文字列を取得(txt = "Basic Authorization Demo")
11行目:Assert.Matchesでtxtが予定していた文字列になっているか確認。(部分一致検索)
12行目:Assert.Equalsでtxtが予定していた文字列になっているか確認。(完全一致検索)
Autoitで認証情報を入力する
上記WScript.Shellとほぼ同様の方法です。入力するためのインスタンスをAutoitにしている以外は、一緒です。Autoitは、RPAの単純入力作業自動化でよく使われているアプリケーションになります。私は、Windowsアプリを自動入力する場合によく利用しています。また、個人的にはWScript.Shellより動作が安定しているので、VBAでキーボード入力する際にも利用しています。
Private Sub AuthenticationDialog_AutoIt()
Dim driver As New ChromeDriver
Dim Assert As New Assert
driver.Get "https://labs.w0s.jp/http/authorization/basic/"
driver.Wait 3000
Dim aut As Object: Set aut = CreateObject("AutoItX3.Control")
aut.Send "guest"
aut.Send "{TAB}"
aut.Send "password"
aut.Send "{ENTER}"
Dim txt As String: txt = driver.FindElementByCss("body > h1").Text
Assert.Matches "Basic", txt '部分一致でAssertが通る
Assert.Equals "Basic Authorization Demo", txt '完全一致でAssertが通る
Stop
driver.Quit
End Sub
AutDlg_WScriptとの差異は、5~9行目がAutoitで認証情報を入力している点です。
Basic認証 失敗例
認証ボックスは、Alert型のダイアログボックスと似ているのですが、Basic認証は、正確にはAlert型ではない様で、オブジェクトキャッチのSwitchToAlertメソッドが利用できませんでした。残念ながら現在、SleniumBasicで認証ダイアログボックスをキャッチできるメソッドが確認できませんでした。認証には失敗しましたが、失敗例として載せておきます。
Private Sub AuthDialog_Selenium()
On Error GoTo ErrHandle
Dim driver As New ChromeDriver
Dim Assert As New Assert
driver.Get "https://labs.w0s.jp/http/authorization/basic/"
Dim dlg As Alert: Set dlg = driver.SwitchToAlert 'ここでエラー発生
driver.FindElementByCss("body > nav > section:nth-child(2) > ul > li:nth-child(1) > a").Click
dlg.SetCredentials "guest", "password"
dlg.Accept
Dim txt As String: txt = driver.FindElementByCss(".example p").Text
Assert.Matches "^Congratulations!", txt
driver.Quit
Exit Sub
ErrHandle:
Debug.Print Err.Description
Stop
driver.Quit
End Sub
4行目で認証ダイアログボックスを出現させています。
5行目でdriver.SwitchToAlertにて認証ダイアログボックスをキャッチしようとしますが、キャッチに失敗し、エラー発生します。エラー内容は、"NoAlertPresentError no such alert・・・"が出力され、alertは存在しない、と言われてしまいます。