SeleniumBasicでBasic認証の利用  usage_authentication

リファレンス

 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は存在しない、と言われてしまいます。

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

この記事を書いた人

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

目次