<スポンサーリンク>

【簡単】VBAでIEを操作しログインする方法~VBA(マクロ)でIE操作

IE関係
この記事は約12分で読めます。
コピーボタン
記事のタイトルとURLをコピー
<スポンサーリンク>

↓のサイトで、IEを表示、要素を抜き出すことができました。
次は、楽天証券にログインしてみたいと思います。

【簡単】VBAでIEの任意のサイトを表示させる方法~VBA(マクロ)でIE操作
VBAでIEを操作する方法はネットを検索しても、まだ確立されきっていないように感じますので、素人が学びながら、そこまで深堀せずに簡単に説明していきたいと思います。VBAでIEの任意のサイトを表示させる方法VBAの入門編として、まずIEの画面...
【簡単】VBAでIEの全要素のデータを取得する方法~VBA(マクロ)でIE操作
↓改良版です。こちら速度向上させましたので、こちらをご覧ください。↓のサイトで、IEを表示することができました。次は、HTMLの中身を確認し、任意の情報を取り出す方法を書いていこうと思います。VBAでIEの全要素のデータを取得する方法マクロ...
スポンサーリンク

VBAでIEを操作しgoogleで検索する方法~VBA(マクロ)でIE操作

今回は、VBAでを操作しgoogleで検索する方法を紹介したいと思います。
まず、サイト内のインプット要素の一覧を見てみましょう。
下記コードは「https://www.google.com/?hl=ja」の全てのインプット要素をエクセルに書き出すコードです。
ダブルクリックでコピーできますのでとりあえずVBAに張り付けて実行してみてください。

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
Sub IEinput()
     
 Application.ScreenUpdating = False
      
'*****↓ここまでは以前と一緒***************************************************
'IEの起動
Dim objIE As Object
      
Set objIE = GetObject("", "InternetExplorer.Application")
      
objIE.Visible = True
          
          
    objIE.Navigate "https://www.rakuten-sec.co.jp/"  ' このURLを任意に変更
          
    ' ページの表示完了待ち。
    While objIE.ReadyState <> 4 Or objIE.Busy = True
        DoEvents
    Wend
'*****↑ここまでは以前と一緒***************************************************
      
'****今日はここから↓***************************************************
      
    On Error Resume Next      '値がないとエラーが出るので、エラー回避用
     
    I = 1  '開始行を指定
    J = objIE.document.all.Length  '要素の数を知る
         
    Cells(I, 1).Value = "No"
    Cells(I, 2).Value = "tagname"
    Cells(I, 3).Value = "Type"
    Cells(I, 4).Value = "NAME"
    Cells(I, 5).Value = "ID"
    Cells(I, 6).Value = "className"
    Cells(I, 7).Value = "TABINDEX"
    Cells(I, 8).Value = "Vakue"
    Cells(I, 9).Value = "checked"
    Cells(I, 10).Value = "親のtagname"
    Cells(I, 11).Value = "innertext"
    Cells(I, 12).Value = "outertext"
    Cells(I, 13).Value = "outherhtml"
    Cells(I, 14).Value = "innerhtml"
    Cells(I, 15).Value = "リンク先"
       
         
     Dim A As Object
          
    For Each A In objIE.document.getElementsByTagName("*")
         
        If A.TagName = "INPUT" Or A.TagName = "BUTTON" Then
         
            Debug.Print A.TagName
    
            Cells(I + 1, 1) = I - 1                     '個数
            Cells(I + 1, 2) = A.TagName                 'TAGネーム
            Cells(I + 1, 3) = A.Type                    'タイプ ※selectボックスは”select-one”と取得
            Cells(I + 1, 4) = A.Name                    '名前
            Cells(I + 1, 5) = A.ID                      'ID
            Cells(I + 1, 6) = A.className               'クラス名
            Cells(I + 1, 7) = A.TabIndex                'フォーカス順序 (Tabでの移動順)
            Cells(I + 1, 8) = A.Value                   '値
            Cells(I + 1, 9) = A.Checked                 'チェック状態 (True = チェック有り、false = チェック無し)
                                                        'checkboxやradioボタンから取得します
            Cells(I + 1, 10) = A.parentElement.TagName  '親のTAG
         
         
         
            If Len(A.innerHTML) > 50 Then
                 
                Cells(I + 1, 11) = Left(A.innertext, 10) & "   ~~~   " & Right(A.innertext, 10)
                Cells(I + 1, 12) = Left(A.outertext, 10) & "   ~~~   " & Right(A.outerrext, 10)
                Cells(I + 1, 13) = Left(A.outerHTML, 10) & "   ~~~   " & Right(A.outerHTML, 10)
                Cells(I + 1, 14) = Left(A.innerHTML, 10) & "   ~~~   " & Right(A.innerHTML, 10)
         
            Else
                 
                Cells(I + 1, 11) = A.innertext
                Cells(I + 1, 12) = A.outertext
                Cells(I + 1, 13) = A.outerHTML
                Cells(I + 1, 14) = A.innerHTML
                             
            End If
               
                
            I = I + 1
             
        End If
             
        'ステータスバーに進捗を表示
        Application.StatusBar = I & "/" & J
          
    Next
         
    On Error GoTo 0
   
    Cells.WrapText = False
     
     
Application.ScreenUpdating = True
Application.StatusBar = False
     
Range(Cells(1, 1), Cells(1, 14)).EntireColumn.AutoFit
Range(Cells(1, 2), Cells(1, 2)).EntireColumn.Interior.ColorIndex = 6
Range(Cells(1, 4), Cells(1, 4)).EntireColumn.Interior.ColorIndex = 6
Range(Cells(1, 8), Cells(1, 8)).EntireColumn.Interior.ColorIndex = 6
      
      
End Sub

検索結果を確認し、操作したい要素を確認。

上記のマクロを実行すると、下記のようなinputとbuttonの要素を抜き出すことができたと思います。
今回は楽天証券にログインしたいのでので、
IDを入力するテキストボックスと、PWを入力する要素、ログインボタンがどれか判別する必要があります。
今回の場合、
ID     → NAME:loginid ID:form-login-id
パスワード → NAME:passwd ID:form-login-pass
ボタン   → 手掛かりになりそうな要素無し → BUTTONとしては3つ目
であることが分かりました。

早速ログインしてみよう!

入力したいID欄と、パスワード欄、ボタンを見つけることができたので、
プログラムに落とし込んでいきたいと思います。
やることは先ほどのプログラムと同じ要領で、
①FOR EACH でTagName("INPUT")、 TagName("BUTTON") をすべて抜き出す(なぜか大文字です)。
IF文で入力したい要素を見つける。
値を入力orボタンを押す
という構成になっています。
今回、最後のクリックだけ、手掛かりになりえる要素がなかったので、
objIE.document.getElementsByTagName("BUTTON")(2).Clickとして代用しました。
※ボタンとして3つ目なのですが、プログラムでは0から数字を始めますので、(2)となっております。
ダブルクリックでコピーできますのでVBAに張り付けて実行してみてください。

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Sub IE_LOGIN()
    
'IEの起動
Dim objIE As Object
    
Set objIE = GetObject("", "InternetExplorer.Application")
    
objIE.Visible = True
        
    objIE.Navigate "https://www.rakuten-sec.co.jp/"  ' このURLを任意に変更
        
    ' ページの表示完了待ち。
    While objIE.ReadyState <> 4 Or objIE.Busy = True
        DoEvents
    Wend
    
'    On Error Resume Next      '値がないとエラーが出るので、エラー回避用
       
    Dim A As Object
        
    For Each A In objIE.document.getElementsByTagName("INPUT") '①FOR EACH でINPUTをすべて抜き出す。
        If A.Name = "loginid" Then A.Value = "わたしのid" '②IF分で入力したい要素を見つけて ③値を代入
    Next
    For Each A In objIE.document.getElementsByTagName("INPUT") '①FOR EACH でINPUTをすべて抜き出す。
        If A.Name = "passwd" Then A.Value = "111111111" '②IF分で入力したい要素を見つけて ③値を代入
    Next
    objIE.document.getElementsByTagName("BUTTON")(2).Click
           
    On Error GoTo 0
   
End Sub

いろいろのやり方でテキストボックスに入力してみる。

今回、ボタンのクリックがイレギュラーな感じになりましたが、
実は要素が特定できれば何でもありなのです。
その例を紹介していきます。
今回のid入力の場合を例にとってみると、4通り考えられます。
①まず、先ほどのプログラムのように要素を名前など限定して指定。
②inputタグの中で何番目か指定。
getElementsByName(””)(0)でNameを直接指定。
 Nameでもそのまま検索することができます。
 getElementsByName(””)の後に(0)で一番最初の要素を取り出していますが、
 ほかに同じ名前があったときに、違う要素を選択してしまう可能性がありますのでご注意ください。
getElementByid("")で指定。
 idを指定する場合は、getElementsではなく、 getElement です。
 idはそのHTMLの中に重複が許されていないので、一つの値に決まるから複数形ではありません。
 したがって、 getElementsbyTagNameやgetElementsbyNameで使用したような番号は必要ありません。

01
02
03
04
05
06
07
08
09
10
'①先ほどのやり方
    For Each A In objIE.document.getElementsByTagName("INPUT") '①FOR EACH でINPUTをすべて抜き出す。
        If A.Name = "loginid" Then A.Value = "わたしのid" '②IF分で入力したい要素を見つけて ③値を代入
    Next
'②何番目の要素かを指定。
 objIE.document.getElementsByTagName("INPUT")(2).Value = "わたしのid"
'③名前で指定。
 objIE.document.getElementsByName("loginid")(0).Value = "わたしのid"
'④IDで決定
 objIE.document.getElementByid("form-login-id").Value = "わたしのid"

ちょっと困った、ログインボタン。

後で気づいたのですが、
TAGINDEXが4なので、これを用いてログインすることができることに気づきました…すみません。
※ちなみにTAGINDEXとはタグを押したときの順序を表しており、
 4回TAGを押すとそこに行くようになっております。

↑この子が厄介なのです。。。

その他、VBAでIEを動かすために必要な情報をまとめています!!

コメント欄

<スポンサーリンク>
タイトルとURLをコピーしました