<スポンサーリンク>
↓のサイトで、IEを表示、要素を抜き出すことができました。
次は、リンクをすべて確認し、任意のリンクをクリックする方法を説明します。
【簡単】VBAでIEの任意のサイトを表示させる方法~VBA(マクロ)でIE操作
VBAでIEを操作する方法はネットを検索しても、まだ確立されきっていないように感じますので、素人が学びながら、そこまで深堀せずに簡単に説明していきたいと思います。 VBAでIEの任意のサイトを表示させる方法 VBAの入門編として、まずIEの...
【簡単】VBAでIEの全要素のデータを取得する方法~VBA(マクロ)でIE操作
↓改良版です。こちら速度向上させましたので、こちらをご覧ください。 ↓のサイトで、IEを表示することができました。次は、HTMLの中身を確認し、任意の情報を取り出す方法を書いていこうと思います。 VBAでIEの全要素のデータを取得する方法 ...
VBAでIEの全リンク先を取得、クリックする方法~VBA(マクロ)でIE操作
今回は、VBAで特定のページのすべてのリンク先を取得、クリックする方法を紹介したいと思います。
下記コードは「グーグルの検索サイト」の
全てのリンク先をエクセルに書き出すコードです。
ダブルクリックでコピーできますのでとりあえずVBAに張り付けて実行してみてください。
Sub IElinkall()
Application.ScreenUpdating = False
'*****↓ここまでは以前と一緒***************************************************
'IEの起動
Dim objIE As Object
Set objIE = GetObject("", "InternetExplorer.Application")
objIE.Visible = True
objIE.Navigate "https://www.google.com/?hl=ja" ' この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 = "uniqueID"
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("A")
Cells(I + 1, 1) = A.uniqueID 'uniqueID
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
Cells(I + 1, 15) = A.href
I = I + 1
'ステータスバーに進捗を表示
Application.StatusBar = I & "/" & J
Next
On Error GoTo 0
Cells.WrapText = False
Application.ScreenUpdating = True
Application.StatusBar = False
Range(Cells(1, 1), Cells(1, 13)).EntireColumn.ColumnWidth = 1
Range(Cells(1, 14), Cells(1, 15)).EntireColumn.AutoFit
Range(Cells(1, 15), Cells(1, 15)).EntireColumn.Interior.ColorIndex = 6
End Sub
簡単にプログラム説明
リンクの場合 TagName は「A」
リンクの場合 TagName は「A」ですので、サイトを表示させた後、
For Each A In objIE.document.getElementsByTagName("A") ~~~ Next
でリンクの要素をすべて検索し、
N列に innerhtml(テキスト名)
O列に href(リンク先) をエクセルに書き出していきました。
リンクをクリックする
ここからリンクをクリックする方法はいろいろとあるのですが、
一番簡単なのは、N列に出したinnertextを用いることです。
下記にコードに「規約」の文字をクリックする場合のコードを示します。
行っていることは、
①FOR EACH で「A」をすべて抜き出す。
②IF文で入力したい要素を見つける。→今回は.innertextが”規約”
③特定した要素.clickでボタンを押す
ダブルクリックでコピーできますのでVBAに張り付けて実行してみてください。
Sub IElinkclick()
'IEの起動
Dim objIE As Object
Set objIE = GetObject("", "InternetExplorer.Application")
objIE.Visible = True
objIE.Navigate "https://www.google.com/?hl=ja" ' この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("A")
If A.innerHtml = "規約" Then A.Click
Next
On Error GoTo 0
End Sub
ほかのやり方も。
また、単純にリンク<A>の中の0から数えて6番目の要素でもありますので、
下記のようなコードでもクリックすることができます。
※プログラムは0から数えるので、(6)となります。
Sub IElinkclick2()
Application.ScreenUpdating = False
'IEの起動
Dim objIE As Object
Set objIE = GetObject("", "InternetExplorer.Application")
objIE.Visible = True
objIE.Navigate "https://www.google.com/?hl=ja" ' このURLを任意に変更
' ページの表示完了待ち。
While objIE.ReadyState <> 4 Or objIE.Busy = True
DoEvents
Wend
On Error Resume Next '値がないとエラーが出るので、エラー回避用
objIE.document.getElementsByTagName("A")(6).Click
End Sub
その他、VBAでIEを動かすために必要な情報をまとめています!!
コメント欄