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