Access2000VBA・Excel2000VBA独学~VBAで、IE11でのGoogle検索にての「トップページにヒットしたWebページ」のURLを取得する例~
※まだ書きかけです。すみません。
※間違ってたらすみません。
※メモ書きなので、自分でも意味不明な箇所も多いです。ごめんなさい。
※関連Webページ
タグ名から要素を特定する
各Tipsの目次らしきページ→ VBAのIE制御掲示板
IE11にてGoogle検索し、「検索結果の最初のページにヒットしたものだけ」、タイトルとURLを取得する処理です。
ただし、「動画」とか「画像」みたいなのが一番上に表示されてしまっている場合はその部分は無視しています。
僕もよくわかってないのですみませんが、色々試してみましたら、以降のコードで、一応、検索結果のタイトルとURLが取得できました。
Excelのアクティブシートに書き出しています。
条件分岐の中で、「anc_anchor01.Click」みたいな感じで「Clickメソッド」を使うと、そのページへ飛ぶこともできます。ただ、別のタブに表示する方法がわかりませんでした。
「InternetExplorer getelementsbytagname 使い方」みたいな感じでWeb検索したら、もしかしたら、何か出てくるかもしれません。
あと、「h3」というタグの一部があったら、タイトルを取得しているようにしていますが、これはHTMLソースを見たら、たまたまGoogleがh3を使っていたようなのでそうしました。なのでほかのタグが使われているページでは正常動作しないと思います。つまり、「h3」だけでなく「h2」なども分岐に加えたほうがいいかもしれません。(私もHTMLタグは詳しくないのでよくわかっていませんのですみません。)
実行するには、VBEの画面にて、「Microsoft Internet Controls」と、「Microsoft HTML Object Library」を参照設定してからにします。
また、参照設定(事前バインディング)をしたので、IEのインスタンスの生成は、CreateObjectではなく、Newでやっています。(参照設定して、CreateObjectしてしまうと2重になってしまうかもしれないので)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
' ' Sub test01() Dim ie As InternetExplorer Dim hd_htdoc As HTMLDocument Dim anc_anchor01 As HTMLAnchorElement Dim i As Integer Dim s_HTML As String Dim s_txt As String Set ie = New InternetExplorer ie.Visible = True ie.Navigate "http://www.google.co.jp/search?q=" & "steve gadd" Call waitNavigation ie Set hd_htdoc = ie.Document i = 1 'HTMLソースの中の、「<A>タグの部分」を総ざらいします。 For Each anc_anchor01 In ie.Document.getElementsByTagName("A") '「anc_anchor01.outerHTML」の中に、 '「<h3」という<h3>タグの一部があったら、 '検索結果の中のタイトルを取得できるっぽいので '以下の処理。 s_HTML = anc_anchor01.outerHTML If 0 < InStr(1, s_HTML, "<h3", vbBinaryCompare) Then s_txt = anc_anchor01.outerText 'anc_anchor01.outerText の中に「改行」がいくつか '含まれてしまっていたので "--" に置換して消す。 Range("A" & i) = Replace(s_txt, vbCrLf, "--", , , vbBinaryCompare) Range("B" & i) = anc_anchor01.href i = i + 1 Else End If Next anc_anchor01 End Sub 'URL画面の読み込み待つ関数 Sub waitNavigation(ie As Object) Do While ie.Busy Or ie.ReadyState < 4 DoEvents Loop End Sub ' ' |
たまたま家に「ExcelVBA IE を思いのままに操作できるプログラミング術」という本が読まずに置いてあったので、それの一部を少し読んでみたら、なんとかやれました。
ただ、結局本を読んでもあまりよくわからず、でも「参照設定」して変数を決め打ちすればインテリセンスが使えるので、それと、HTMLソースを見てなんとかやってみただけなので、本当はもっとちゃんとしたコードがあるようにも思います。
IEの操作はそういった本を1冊買っておいた方が早いかもしれません。
※追記
今、この本、ちゃんと最後までさらーっと読み直してみたら、すごくよさそうです。今後ももしIE操作を細かく自動化したかったら、買っておいても損はないかもです。
著者のサイト?かは不明ですが、以下のサイトもよさげです。本に書いてることよりも詳しい説明も載っていました。(本書にもこのようなことが書かれています。本から入った方がわかりやすいと思います。)
タグ名から要素を特定する(https://www.vba-ie.net/sp/element/getelementsbytagname.php)
各Tipsの目次らしきページ→ VBAのIE制御掲示板(https://www.vba-ie.net/qanda/qanda.cgi)