今回は楽天のRMSに自動ログインするVBAをご説明します。
※IE操作はソースを変更された場合動かなくなる可能性があります。
楽天RMSに自動ログインするにはVBAでIEの操作をする必要があります。
IEの操作はVBAの中でも難易度の高い方かなと思います。
一応、サンプルファイルをダウンロードして頂き、IDとパスワードを書き換えてもらうだけで、動くように作成しています。
1.楽天RMSログインのサンプルコード
コードの後に簡単にご説明します。
全て標準モジュールに記載しています。
Option Explicit
'SleepAPI
#If VBA7 Then
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr)
#Else
Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long)
#End If
'IE最前面API
Declare Function IsIconic Lib "user32.dll" (ByVal hWnd As Long) As Long
Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hWnd As Long) As Long
Declare Function ShowWindowAsync Lib "user32.dll" ( _
ByVal hWnd As Long, _
ByVal nCmdShow As Long _
) As Long
Const SW_RESTORE As Long = 9
Sub Rakuten_Login()
Dim objIE As InternetExplorer
Dim WaitTime As Long
Dim i As Long
Dim FirstID As String
Dim FirstPW As String
Dim NextID As String
Dim NextPW As String
'=====================SET=====================
FirstID = ""'1つめのID
FirstPW = ""'1つめのパスワード
NextID = ""'2つめのID
NextPW = ""'2つめのパスワード
WaitTime = 3'IE読み込み用の微調整待機時間
'=============================================
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
objIE.navigate "https://glogin.rms.rakuten.co.jp/"
Call IE_Wait(objIE)
Call Manual_Wait(WaitTime)
'ウィンドウが最小化されているかのチェック
If IsIconic(objIE.hWnd) Then
ShowWindowAsync objIE.hWnd, SW_RESTORE
End If
'IEを最前面に表示
SetForegroundWindow (objIE.hWnd)
'パスワードボックスに値を入力
objIE.document.getElementsByName("login_id")(0).Value = FirstID
objIE.document.getElementsByName("passwd")(0).Value = FirstPW
'送信ボタンをクリック
objIE.document.getElementsByName("submit")(0).Click
Call IE_Wait(objIE)
Call Manual_Wait(WaitTime)
'2つ目のパスワードボックスに値を入力
objIE.document.getElementsByName("user_id")(0).Value = NextID
objIE.document.getElementsByName("user_passwd")(0).Value = NextPW
'送信ボタンをクリック
objIE.document.getElementsByName("submit")(0).Click
Call IE_Wait(objIE)
Call Manual_Wait(WaitTime)
'次へクリック
objIE.document.getElementsByName("submit")(0).Click
Call IE_Wait(objIE)
Call Manual_Wait(WaitTime)
'IEウィンドウをJavaScriptで自動スクロール
'スクロールしないと反応しない
For i = 1 To 2
objIE.document.Script.setTimeout "javascript:scrollTo(0," & objIE.document.body.scrollHeight & ");", 100
Sleep 100
Next i
'送信ボタンをクリック
Call TagClick(objIE, "button", "上記を遵守していることを確認の上")
End Sub
Function IE_Wait(ByRef objIE As Object)
Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE
DoEvents
Loop
End Function
Function Manual_Wait(ByVal WaitTime As Long)
Dim ExecutTime As Date
ExecutTime = DateAdd("s", WaitTime, Now)
While Now < ExecutTime
DoEvents
Wend
End Function
Function TagClick(objIE As InternetExplorer, _
TagName As String, _
TagStr As String)
Dim objTag As Variant
For Each objTag In objIE.document.getElementsByTagName(TagName)
If InStr(objTag.outerHTML, TagStr) > 0 Then
objTag.Click
Call IE_Wait(objIE)
Exit For
End If
Next
End Function
上から順番に説明します。
「SleepAPI」は今回は使用していませんが、環境によってはSleepで微調整が必要かと思いましたのでAPIの宣言しています。
「IE最前面API」はIEを起動した際に、最前面にするためのAPIです。
こちらは必須ではありません。
「Sub Rakuten_Login()」でログインのメインプロセスを記載しています。
SETの部分に、各パスワードとIDを文字列として入力して頂くと、ログインできます。
1つ目のIDとPWを入力して、画面遷移を行い、2つ目のIDとPWを入力して画面遷移を行います。
次に「次へ」ボタンをクリックして、最後の画面で「上記を遵守していることを確認の上」のボタンをクリックしています。
このボタンはスクロールしてからじゃないと、クリックしても反応しないようです。
「Function IE_Wait」はIEの読み込みを待機しています。
これがないと、IE画面遷移前に次の実行が行われてエラーになります。
「Function Manual_Wait」は変数の「WaitTime 」で指定した時間分意図的に待機させます。
「Function TagClick」はタグとテキストを指定して、指定されたタグをループで探してクリックしています。
実用編なので、簡単な説明でした。
ブラウザの操作はソースが変更されると動かなくなりますので、現時点で動いていたものでも、変更に伴い動かなくなる可能性もございますので、ご了承ください。
2.サンプルファイル ダウンロード
こちらからログイン用のVBAが記載しているファイルをダウンロードできます。
VBEを開いていただき、SET部分のIDとPWを2つ入力して、頂くとご自身の環境でも動くと思います。