【VBA×Selenium】ポップアップウィンドウの操作について

みなさんこんにちは。

Webスクレピングをしているとよく見かけるのがポップアップウィンドウです。

これはJavaScriptによって表示されるダイアログなのですが、

HTMLで表示されているわけはない為、これまでのような要素の取得による方法では操作ができません。

また、ダイアログにも種類がある為それぞれの方法を使う必要があります。

今回は、そんなポップアップウィンドウの操作方法についてご紹介します。

この記事はこんな人におすすめ

この記事はこんな人におすすめです!

  • VBAプログラミング:初級者~中級者
  • Webスクレイピング:初級者~中級者
  • コードだけサクッと取得したい人
  • 効率の良いコードを書きたい人

といったところでしょうか。

VBA×Seleniumに関する過去の記事

VBA×Seleniumに関する小ワザやテクニックなどの参考記事については、過去にご紹介しておりますのでそちらもどうぞ。

今回の記事を読むメリット

ポップアップウィンドウの操作方法を知るメリットは以下の通りです。

  • Webスクレイピングの基礎の定着
  • 基本操作の振り返りと備忘録
  • アラートを含めたポップアップウィンドウの対処法習得

といったところでしょうか。

スクレイピングを数多く実施していると誰しもが経験する内容かと思います。

且つ忘れずに覚えていくことが作業効率につながります。

一度やり方を覚えてしまえば今後も活かせる内容になるかと思います。

ポップアップウィンドウについて

ダイアログの種類について

JavaScriptのダイアログには以下のようなものがあります。

  • アラートダイアログ
  • 確認ダイアログ
  • 入力ダイアログ

アラートダイアログ

以下のようなダイアログをアラートダイアログまたは、警告ダイアログといいます。

この場合、出現したポップアップに対して「OK」ボタンをクリックする処理になります。

コード紹介

Option Explicit
Private Sub Handle_Checkbox()
    Dim Assert As New Selenium.Assert
    Dim driver As New Selenium.WebDriver
    Dim cb As WebElement
    Dim strXpath As String
        
    driver.Start "Chrome"  'クロームブラウザを立ち上げます。
    driver.Get "https://www.tagindex.com/javascript/window/alert1.html" ' TAG Index(警告ダイアログ)を開く
    strXpath = "/html/body/div[2]/div/div[1]/main/article/section[1]/figure/p/input" ' 警告ダイアログボタンのXpathを取得
    driver.FindElementByXPath(strXpath).Click ' 警告ダイアログボタンをクリック
    driver.SwitchToAlert.accept
    Stop
    driver.Quit

End Sub

ここでポイントになるのはSwitchToAlertメソッドとAcceptメソッドになります。

CHECK!!

driver.SwitchToAlert.Accept

このメソッドを使うことで、ページ中のアラートダイアログにフォーカスを移すことができます。

またAcceptメソッドを使うことにより、警告ダイアログを受け入れることができます。

確認ダイアログ

以下のようなダイアログを確認ダイアログといいます。

アラートダイアログと異なる点として「OK」ボタンと「キャンセル」ボタンがついているのが特徴です。

コード紹介

Option Explicit
Private Sub Handle_Checkbox()
    Dim Assert As New Selenium.Assert
    Dim driver As New Selenium.WebDriver
    Dim cb As WebElement
    Dim strXpath As String
        
    driver.Start "Chrome"  'クロームブラウザを立ち上げます。
    driver.Get "https://www.tagindex.com/javascript/window/alert1.html" ' TAG Index(確認ダイアログ)を開く
    strXpath = "/html/body/div[2]/div/div[1]/main/article/section[1]/figure/p/input" ' 確認ダイアログボタンのXpathを取得
    driver.FindElementByXPath(strXpath).Click ' 確認ダイアログボタンをクリック
    
    'OKボタンをクリックする場合
    driver.SwitchToAlert.accept
    'キャンセルボタンをクリックする場合
    driver.SwitchToAlert.Dismiss
    driver.SwitchToAlert.accept
    Stop
    driver.Quit

End Sub

ここでポイントになるのはSwitchToAlertメソッドとAcceptメソッド、Dismissメソッドになります。

CHECK!!

driver.SwitchToAlert.Dismiss

driver.SwitchToAlert.accept

ページ中のダイアログにフォーカスを移すのは警告ダイアログでも同じですが、

ウィンドウ内に「OK」と「キャンセル」が存在しています。

「OK」の場合はAcceptメソッド、

「キャンセル」の場合はDismissメソッドを使います。

このサイトの場合「キャンセル」ボタンをクリックした後、

再度アラートダイアログが表示されるのでAcceptメソッドを使っています。

入力ダイアログ

以下のようなダイアログを入力ダイアログといいます。

ユーザーに入力を促すテキストボックスを表示させているのが特徴です。

コード紹介

Option Explicit
Private Sub Handle_Checkbox()
    Dim Assert As New Selenium.Assert
    Dim driver As New Selenium.WebDriver
    Dim cb As WebElement
    Dim strXpath As String
        
    driver.Start "Chrome"  'クロームブラウザを立ち上げます。
    driver.Get "https://www.tagindex.com/javascript/window/prompt.html#google_vignette" ' TAG Index(入力ダイアログ)を開く
    strXpath = "/html/body/div[2]/div/div[1]/main/article/section[1]/figure/p/input" ' 入力ダイアログボタンのXpathを取得
    driver.FindElementByXPath(strXpath).Click ' 入力ダイアログボタンをクリック
    
    'テキストボックスに”TEST”と入力する
    driver.SwitchToAlert.SendKeys "TEST"
    driver.SwitchToAlert.accept
    Stop
    driver.Quit

End Sub

ここでポイントになるのはSwitchToAlertメソッドとSendKeysメソッドになります。

CHECK!!

driver.SwitchToAlert.SendKeys “入力したい内容”

ページ中のダイアログにフォーカスを移すのは同じで、

テキストボックスへの入力にSendKeysメソッドを使っています。

入力する時点では何も表示されていませんが、

acceptメソッドを使用した後以下のように表示されています。

最後に

いかがでしたでしょうか。

Seleniumを使用していると予測不能な謎エラーに遭遇することが多々あります。

ですので、しっかりマスターして基本を抑えながらと実装できると業務効率も格段に向上するかと思います。

そのきっかけとして、少しでも参考になればと思います。

開発依頼について

ココナラでWebスクレイピング開発サービスを出品しております。

自分で開発をしようと思ったけど、依頼したり、何か聞きたいことがあったりしたら

いつでもお気軽にご相談ください。

また、本ブログからご依頼いただいた方については割引特典がございますので、

ご不明点と合わせてメッセージをいただけると幸いです。

Excelにてブラウザ操作自動化ツールを作成します その作業、webスクレイピングを使って自動化しましょう!

Webスクレイピング以外にもWebアプリの開発サービスも出品しております。

こちらについても、本ブログからご依頼いただいた方については割引特典がございますので、

お気軽にご相談ください。

スモールスケールのWebアプリ開発します 先ずはスモールスケールのWebアプリから始めませんか?

ご興味がある方はこちら!!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA