ねぇもりさん、VBAでスクレイピングをしたいんだけど、目的の画面にたどりつくまでが大変なんだよね・・・
もり
それなら、先に画面を開いておけばいいんだよ!
起動済みの画面のHTMLを取得する方法を紹介するね
起動済みの画面のHTMLを取得する方法を紹介するね
VBAでスクレイピングをしたい!と思って、[VBA IE操作]というキーワードで検索して出てくる記事は、こんな流れのが多いですよね。
- IEを起動
- 目的のURLにアクセス
- IDとパスワードを入力してログイン
- HTMLを読み込む
- スクレイピング開始
HTMLを読み込んでスクレイピングを開始するまでが大変・・・そんなときは、先に目的の画面を開いておき、そのHTMLを取得してしまいましょう!
こちらの三流君を参考にさせていただきました。
TypeNameとShell.Applicationを使い起動済みのIEを探す
スポンサーリンク
Contents
起動済みの画面のHTMLを取得する
※この記事はVBAでIE操作をしたことがある人向けに書いているので、VBA全般の解説は省略しています。
こちらのWebサイトを使用して解説していきます。
コミュニティ「ノンプログラマーのためのスキルアップ研究会」についてのお知らせ
コード
参照設定で下記の2つを使用します。
- Microsoft HTML Object Library
- Microsoft Internet Controls
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 |
Sub 起動済みの画面のHTMLを取得する() Dim shl As Object 'シェルオブジェクト生成 Set shl = CreateObject("Shell.Application") Dim targetTitle As String '取得したいウィンドウのタイトルを設定 targetTitle = "コミュニティ「ノンプログラマーのためのスキルアップ研究会」についてのお知らせ #ノンプロ研" Dim win As Object, getFlag As Boolean For Each win In shl.Windows '起動中のウィンドウを順番にみていく 'IEとエクスプローラがシェルで取得されるため、IEのみ処理 If TypeName(win.document) = "HTMLDocument" Then If win.document.Title = targetTitle Then Dim objIE As New InternetExplorer Set objIE = win getFlag = True '正しく取得できた Exit For End If End If Next If getFlag = False Then MsgBox "目的の画面が開かれていません。", vbExclamation Exit Sub End If '目的の画面のHTMLを読み込む Dim htmlDoc As HTMLDocument Set htmlDoc = objIE.document End Sub |
マクロの使い方
①titleの設定
上記コードの変数targetTitleに、対象画面のtitleの文字列を設定します。
下記のいずれかの方法で、対象画面のHTMLを確認します。
- Ctrl+U
- マウス右クリック→ソースの表示
titleタグを探しましょう!(先頭の方にあるはず)
<title>~</title>
1 |
<title>コミュニティ「ノンプログラマーのためのスキルアップ研究会」についてのお知らせ #ノンプロ研</title> |
②操作対象の画面をIEで起動しておく
Internet explorerで対象画面にアクセスしておきます
ログインが必要なシステムの場合は、ログイン処理もしておきます
③マクロを実行
これで、対象画面のHTMLが変数htmlDocに格納できたので、あとは自由にVBAで操作しましょう!
スポンサーリンク
スポンサーリンク