0
0

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埋込による方法での認証」に加えて「ログイン画面(下図)から入力して認証」も「おまけ」して紹介します。

image-49.png

あれ?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」ボタンもクリックが可能となります。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?