マイクロソフトはもはや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 件のコメント:
コメントを投稿