2021年10月27日水曜日

vbaでIEを起動し、webページから情報を抽出する。

マイクロソフトはもはやIEを使うな、edgeにしてくれといっているが、以下のようなvbaでIEを起動し、webページを巡回し、情報を抽出してみた。

Dim objIE As InternetExplorer
Dim objITEM As Object
Dim objTD As Object
Dim i As Long
Sub main()
    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = True
    objIE.Navigate2 "http://www.sample.com/index.html")
    Do While objIE.Busy = True Or objIE.readyState<>4 
        DoEvents
    Loop
    objIE.document.forms("form01").param1.Value = "KEYWORD"
    objIE.navigate "javascript:js_001;"   ' Execute javascript js_001
    Application.Wait Now + TimeValue(00:00:02")  '画面表示を2秒待つ
    For Each objTD In objIE.document.getElementsByTagName("tr")                     
      For Each objITEM In objIE.document.getElementsByTagName("a")
        '↑↑↑このgetElementsByTagNameで目的のaタグを手繰るところがミソ
        If Instr(objITEM.outerHTML,"KEYWORD") > 0 then 'KEYWORDという文字列を持つaタグを探し
          objITEM.click                                'リンク(ボタン)をクリックする
          Exit For
        End If
      Next
    Next
    Application.Wait Now + TimeValue(00:00:02") '画面表示を2秒待つ
    
    上記コードをマネし、getElementsByTageNameでタグを手繰り、必要な情報をゲットする。
    HTMLページの解析には、IEの開発者タブF12を使う。
    
End Sub

 これでいいかな?

 途中にある以下のコードは、ページが完全に表示されるまでを待つコードとして、ググると出てくるコードだが、その機能はなさそうだ。

    Do While objIE.Busy = True Or objIE.readyState<>4 
        DoEvents
    Loop

 では、どうすればいいか?それは、表示されたページにあるはずの文字列KEYWORD2が出ているかを確認すればいい。こんな感じだ。文字列を間違えると、無限ループになるので、注意が必要だ。詳しくは、こちらで。EXCEL+VBAで仕事を効率化〜既に開いているIEページをつかまえる。InStr関数で確実に!

        Do While Instr(objIE.document.innertext,"KEYWORD2") = 0 then 'KEYWORD2という文字列が表示されていないならば
          Application.Wait Now + TimeValue(00:00:02") '画面表示を2秒待つ
        End If

0 件のコメント:

コメントを投稿