1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【SeleniumVBA】Basic認証を処理する

Last updated at Posted at 2025-01-21

1 はじめに

以下のblueさんの記事の末尾に「おまけ:Basic認証を処理する」として、SeleniumBasicを利用したBasic認証のコードの記載がありました。

今回、認証サイトは同じものを利用しまして、SeleniumVBAを利用したコードによりログインを実現したいと思います。

上の記事で紹介のありました「URL埋込による方法での認証」に加えて「Chrome DevTools Protocol(CDP)を利用して認証」も「おまけ」して紹介します。

あれ?VBAでもCDPが利用できるの?と思われたかもしれません。SeleniumVBAではSelenium4で追加されたCDPサポートにも対応していて、ExcecuteCDPメソッドによりCDPのコマンドが利用できます。(SeleniumBasicでは対応していません)

他に、以下のログイン画面を表示してからSendKeysを利用して、キー送信する方法もありますので紹介します。

image-49.png

2 ExcelVBAコード

以下のコードを丸ごとコピーしてSeleniumVBA.xlsmに新規の標準モジュールを作成して貼り付けますと、実際に動作確認ができます。

もし、SeleniumVBAがまったく初めての方は、こちらの記事を参考に新規の標準モジュール作成まで行ってください。

(1) URL指定によるBasic認証
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
(2) CDP利用によるBasic認証
Sub CDP_BasicAuth()
'=======================================
'CDP利用によるBasic認証
'=======================================
    Dim driver As SeleniumVBA.WebDriver
    Dim caps As SeleniumVBA.WebCapabilities
    Dim userName As String
    Dim pw As String
    Dim params As Dictionary
    Dim authString As String
    
    Set driver = SeleniumVBA.New_WebDriver
    With driver
    
    .StartChrome
    Set caps = .CreateCapabilities()
    'ドライバを終了してもブラウザは開いたまま
    caps.SetDetachBrowser True
    .OpenBrowser caps
    .NavigateTo "http://leggiero.sakura.ne.jp/xxxxbasic_auth_testxxxx/"
    
    userName = "kaiin"
    pw = "naisho"
    
    .ExecuteCDP "Network.enable"
    authString = "Basic " & EncodeStringToBase64(userName & ":" & pw)
    
    Set params = New Dictionary
    params.Add "headers", New Dictionary
    params("headers").Add "authorization", authString
    
    .ExecuteCDP "Network.setExtraHTTPHeaders", params
    .FindElement(By.XPath, "//a[text()='ここ']").Click
    
    .Shutdown
    End With
End Sub

Private Function EncodeStringToBase64(text As String) As String
    Dim bytes() As Byte
    Dim domDoc As Object
    Dim domElem As Object
    bytes = StrConv(text, vbFromUnicode)
    Set domDoc = CreateObject("MSXML2.DOMDocument")
    Set domElem = domDoc.createElement("b64")
    domElem.DataType = "bin.base64"
    domElem.nodeTypedValue = bytes
    EncodeStringToBase64 = Replace(domElem.text, vbLf, "")
End Function
(3) SendKeysによるBasic認証
Sub SendKeys_Auth()
'=======================================
'SendKeysによる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
        
    .NavigateTo "http://leggiero.sakura.ne.jp/xxxxbasic_auth_testxxxx/"
    .FindElement(By.XPath, "//a[text()='ここ']").Click
    
    userName = "kaiin"
    pw = "naisho"
    
    'ログインポップアップを表示してからSendKeys
    VBA.SendKeys userName, True
    .Wait 1000 '1秒待機

    VBA.SendKeys "{TAB}", True
    .Wait 1000 '1秒待機

    VBA.SendKeys pw, True
    .Wait 1000 '1秒待機

    VBA.SendKeys "{ENTER}", True
    .Wait 1000 '1秒待機
      
    'ドライバ終了(画面はそのまま)
    .Shutdown
    
    End With
End Sub

「秘密の会員ページへようこそ!」が表示されていれば正常に動作しています。

3 出典

以下のとおり、SeleniumVBA.xlsmの標準モジュール内のサンプルコードを利用しました。

(1) URL埋込によるBasic認証

「SeleniumVBA.xlsm」⇒標準モジュール「test_Authentication」⇒プロシージャ「test_BasicAuthentication」

(2) CDP利用によるBasic認証

「SeleniumVBA.xlsm」⇒標準モジュール「test_Sendkeys」⇒プロシージャ「test_CDP_BasicAuthentication」

4 おわりに

(2025/4/12更新)
これまでSebdKeysToOSメソッドを利用する方法を紹介していましたが、vbsファイルを実行しており、将来動作しなくなるおそれがあるため、標準のSendKeysの利用に差し替えました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?