こんにちは。blueです。
今回はTinySeleniumVBA-Excel VBAを用いたYahooメールへのログイン方法について説明します。
業務やプライベートにおいてサイトでのログインは日常的に行われていると思います。
この記事を読んでいただければ
- Webサイトを表示させる
- Webサイトでのログイン操作(ID,パスワード入力,クリック)ができる
ようになりますのでぜひ読んでいってください。
前提
今回の方法でスクレイピングをするにはTinySeleniumVBAのインストールと設定が必要です。
方法については以下を参照ください。
今回のフロー
今回のフローは以下です。
- Sleep関数を使う為の環境を構築する
- ChromeをたちあげてYahooサイトにアクセスする
- Yahooサイトの[メール]をクリックする
- ログイン画面にてユーザーネームを入力し、次へを押す
- パスワードを入力し、次へを押す
以下で詳しく説明します。
全コード
全コードは以下になります。なおユーザーIDとパスワードは自分のものをご使用ください。
Option Explicit
#If Win64 Then
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
#Else
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If
Sub sample()
Dim Driver As New WebDriver
'WebDriverManager4TinySeleniumを入れていない場合は以下2行のコメントアウトを解除し、SafeOpen Driver, Chromeをコメントアウトすること なおChromeDriverはExcelファイルと同じフォルダに入っているものとする
'Driver.Chrome "./chromedriver.exe"
'Driver.OpenBrowser
SafeOpen Driver, Chrome
Driver.Navigate "https://www.yahoo.co.jp/"
Driver.FindElement(By.CssSelector, "#StatusMail > a > dl").Click
Driver.FindElement(By.CssSelector, "#username").SetValue ("ユーザーID")
Driver.FindElement(By.CssSelector, "#btnNext").Click
Sleep 1000
Driver.FindElement(By.CssSelector, "#passwd").SetValue ("パスワード")
Driver.FindElement(By.CssSelector, "#btnSubmit").Click
End Sub
コードの説明
Sleep関数を使用するための環境を構築する
TinySeleniumVBAにはプログラミングを停止させるメソッドは標準では存在しません(SeleniumBasicやSeleniumVBAにはWaitメソッドが存在します)。
その為Windows APIのSleep関数を使用できるようにします。
#If Win64 Then
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
#Else
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If
詳しい記事はこちらを確認ください。
ChromeをたちあげてYahooサイトにアクセスする
WebDriverが最新バージョンであるかどうかを確認し、Chromeを立ち上げます。
Dim Driver As New WebDriver
'WebDriverManager4TinySeleniumを入れていない場合は以下2行のコメントアウトを解除し、SafeOpen Driver, Chromeをコメントアウトすること なおChromeDriverはExcelファイルと同じフォルダに入っているものとする
'Driver.Chrome "./chromedriver.exe"
'Driver.OpenBrowser
SafeOpen Driver, Chrome
WebDriverのバージョン確認にはWebDriverManager for VBA(@yamato1413さん作成)を使用します。この中にあるSafeOpen関数を用いてバージョンを確認しています。
なおWebDriverManagerが入っていない場合は上の二行のコードを使用してください。
そして、ChromeDriverのあるパスを指定してください(コードではExcelと同じ階層にChromeDriverを入れ、相対パスで指定しています)
Yahooを表示させるコードは以下になります。
Driver.Navigate "https://www.yahoo.co.jp/"
TinySeleniumVBAでサイトにアクセスする際はNavigateメソッドを使用します。
なおサイト名は目的に応じて変えることが可能です。
Yahooサイトの[メール]をクリックする
Yahooサイトのメールをクリックするにはクリックする部分の要素を取得し.Clickメソッドを使用します。
ここで要素を取得するにはChromeのデベロッパーツールを使用します。
使用方法は以下になります。
1 右上の3つボタンをクリック→[その他のツール]→[デベロッパーツール]をクリックする
2 出てきた画面の左上の矢印ボタンをクリックする
3 実際にクリックするメールの部分にカーソルを合わせる。なお要素には文字や画像、枠など多くのものが存在する為、クリックする際に必要な枠を選択する
4 選択した要素の部分で右クリック→[Copy]→[Copy selector]をクリックする
5 VBAにて以下のコードを入力。セレクターには先ほどコピーした内容を貼り付ける
Driver.FindElement(By.CssSelector, "セレクター").Click
ログイン画面が表示されます。
ログイン画面にてユーザーネームを入力し、次へを押す
ログイン画面にてユーザー名を入力するにはユーザー名の部分の要素を取得し、SetValueメソッドを用いてテキストを入力します。
1 先ほどと同様に 右上の3つボタンをクリック→[その他のツール]→[デベロッパーツール]をクリック
先ほどと同様にユーザー名の部分の要素を取得します。
2 出てきた画面の左上の矢印ボタンをクリック →入力する部分をクリック→ 選択した要素の部分で右クリック→[Copy]→[Copy selector]をクリック
3 VBAにて以下のコードを入力。セレクターには先ほどコピーした内容を貼り付ける
Driver.FindElement(By.CssSelector, "セレクター").SendValue ("ユーザーID")
指定した要素に対してSetValueメソッドを実行することによってカッコ内のテキストを入力できます。
テキストが入力できました。
次は下の「次へ」ボタンを入力することになりますが 【Yahooサイトの[メール]をクリックする】方法と同じ方法で要素を取得し、コードを入力します。
具体的には以下のコードになります。
Driver.FindElement(By.CssSelector, "#btnNext").Click
パスワード画面が表示されます。
パスワードを入力し、次へを押す
パスワードの入力もユーザー名の入力と同じです。
同様にパスワードの部分の要素を取得したうえでSetValueメソッドを用いてコードを入力します。
合わせてクリックメソッドを用意します。
Driver.FindElement(By.CssSelector, "#passwd").SetValue ("パスワード")
Driver.FindElement(By.CssSelector, "#btnSubmit").Click
Yahooメール画面が無事に表示されました。
ここでのまとめ
スクレイピングにおいてクリック操作やテキスト入力は基本中の基本です。
サイトにアクセスするだけであればボタン操作とテキスト操作で可能ですのでわずかなコードの理解で操作可能です。
これができるだけでかなりの自動化は実感できますのでまずは自分がアクセスしたいサイトで試してみることをお勧めします。
SeleniumBasicはソフトのインストールは必要となりますが、モジュールの導入は不要です。SeleniumBasicについて勉強されたい方は以下の記事もお勧めです。
またSeleniumについては以下の書籍もあります。どちらも使い方について詳しい説明がなされているのでお勧めです。
VBAを使ったものではありませんが、Seleniumを勉強する為の基本的な書籍です。ブラウザやキー操作の基本的なコマンドは共通していますのでコードを書く際の参考になります。
VBAの書籍の中でSeleniumBasicを取り上げている数少ない書籍です。ページ数としては20ページほどですがとてもわかりやすく書かれています。またVBA全般を網羅した内容が書かれており、長く使用することができます。
SeleniumVBAに関する記事はこちら
【SeleniumVBA】初心者向けに導入方法についてわかりやすく説明します(Excel VBA)
【SeleniumVBA】スクレイピングで使うメソッドについて説明します。
【SeleniumVBA】Yahooメールへのログイン方法をわかりやすく説明する(Excel VBA)
【SeleniumVBA】スクレイピングで使うメソッドについて説明します2(Excel VBA)
【SeleniumVBA】スクレイピングをする為のメソッド一覧表
【SeleniumVBA】ブラウザを操作するメソッドについてサンプルコードを紹介します
【SeleniumVBA】2022年9月の更新に伴うコードの変更点について説明します。
【SeleniumVBA】アラート処理に関するメソッドについてコードを紹介します
【SeleniumVBA】待機処理に関するメソッドについてコードを紹介します
コメント