1 はじめに
以下のblueさんの記事の末尾に「おまけ:Basic認証を処理する」として、SeleniumBasicを利用したBasic認証のコードの記載がありました。
今回、認証サイトは同じものを利用しまして、SeleniumVBAを利用したコードによりログインを実現したいと思います。
上の記事で紹介のありました「URL埋込による方法での認証」に加えて「ログイン画面(下図)から入力して認証」も「おまけ」して紹介します。
あれ?Basic認証のログイン画面はSeleniumで操作できなかったのでは?と思われたかもしれません。SeleniumVBAの独自メソッドであるSendKeysToOSを利用することで、右クリックしてもメニューが現れないようなSeleniumの操作対象とならないブラウザ以外のウィンドウにキー送信を実現しています。
他に、Chrome DevTools Protocol(CDP)にあるNetwork.setExtraHTTPHeadersメソッドを利用して認証する方法もありますが、複雑になるため割愛しました。
2 ExcelVBAコード
以下のコードを丸ごとコピーしてSeleniumVBA.xlsmに新規の標準モジュールを作成して貼り付けますと、実際に動作確認ができます。
もし、SeleniumVBAがまったく初めての方は、こちらの記事を参考に新規の標準モジュール作成まで行ってください。
Option Explicit
Sub BasicAuth()
'=======================================
'URL指定によるBasic認証
'=======================================
Dim driver As SeleniumVBA.WebDriver
Dim caps As SeleniumVBA.WebCapabilities
Dim userName As String
Dim pw As String
Set driver = SeleniumVBA.New_WebDriver
With driver
.StartChrome
Set caps = .CreateCapabilities()
'ドライバを終了してもブラウザは開いたまま
caps.SetDetachBrowser True
.OpenBrowser caps
userName = "kaiin"
pw = "naisho"
'ログインポップアップを出さずにURLで認証
.NavigateTo "http://" & userName & ":" & pw & "@leggiero.sakura.ne.jp/xxxxbasic_auth_testxxxx/"
.FindElement(By.XPath, "//a[text()='ここ']").Click
'ドライバ終了(画面はそのまま)
.Shutdown
End With
End Sub
Sub SendKeys_Auth()
'=======================================
'SendKeysToOSメソッドによるBasic認証
'=======================================
Dim driver As SeleniumVBA.WebDriver
Dim caps As SeleniumVBA.WebCapabilities
Dim creds As String
Dim keys As SeleniumVBA.WebKeyboard
Set driver = SeleniumVBA.New_WebDriver
Set keys = SeleniumVBA.New_WebKeyboard
With driver
.StartChrome
Set caps = .CreateCapabilities()
'ドライバを終了してもブラウザは開いたまま
caps.SetDetachBrowser True
.OpenBrowser caps
.NavigateTo "http://leggiero.sakura.ne.jp/xxxxbasic_auth_testxxxx/"
.FindElement(By.XPath, "//a[text()='ここ']").Click
'ログインポップアップを表示してからSendKeys
creds = "kaiin" & keys.TabKey & "naisho" & keys.EnterKey 'username and password
.SendKeysToOS _
keyString:=creds, _
timeDelayMS:=0, _
windowTitle:="", _
runOnSeparateThread:=False, _
waitForWindow:=False
'ドライバ終了(画面はそのまま)
.Shutdown
End With
End Sub
「秘密の会員ページへようこそ!」が表示されていれば正常に動作しています。
3 出典
以下のとおり、SeleniumVBA.xlsmの標準モジュール内のサンプルコードを利用しました。
(1) URL埋込によるBasic認証
「SeleniumVBA.xlsm」⇒標準モジュール「test_Authentication」⇒プロシージャ「test_BasicAuthentication」
(2) SendKeysToOSメソッドによるBasic認証
「SeleniumVBA.xlsm」⇒標準モジュール「test_Sendkeys」⇒プロシージャ「test_Authentication」
4 おわりに
SendKeysToOSの仕組みについては、以下のDiscussionが参考になるかと思います。
これを利用しますと「証明書の選択」ポップアップウィンドウの「OK」ボタンもクリックが可能となります。