質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

Q&A

解決済

2回答

2311閲覧

Excel VBA IEを用いたスクレイピングで使用するオブジェクトについて教えてください

exnjinia

総合スコア15

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

0グッド

0クリップ

投稿2020/04/20 14:13

編集2020/04/20 14:29

Excel VBAのInternetExplorerを用いたスクレイピングで使用するオブジェクトについて教えてください(主にInternetExplorerクラス)

Excel VBAでIEを使用したスクレイピングの勉強をしています。

その際、書籍やサイトを見るとInternetExplorerクラスが使われています。

たとえば、テキストを取得するときは
ie.document.body.InnerText

サイト上に設置されたボタンを押すときには
ie.document.getElementById("Button")

ここで質問なのですが、こうしたInternetExplorerクラスのプロパティ、メソッドはどこを見れば一覧を確認できるのでしょうか。

オブジェクトブラウザで検索すると、InternetExplorerクラスはヒットするのでdocumentがそのメンバであることは確認できます。

しかし、document以下は検索してもヒットせず、documentやその下の(上記の例であればbodyやgetElementByIdなど)のプロパティ、メソッドはどういった種類のものがあるのかがわかりません。

様々な書籍やサイトで当たり前のように使われているInternetExplorerクラスですが、皆様はどのようにして内容や使い方を確認しているのでしょうか。

InternetExplorerクラスについてというよりも基本的なオブジェクトの概念やVBEの使い方の問題かもしれませんが、どうすればInternetExplorerクラスを使用する際に
・ie.document.body.InnerText
・ie.document.getElementById("Button")
などの存在を調べることができるのか教えていただけると幸いです。

※ちなみに、bodyやgetElementByIdはオブジェクトブラウザで検索するとそれぞれ5~6件ヒットするのですが、いずれも所属するクラスがInternetExplorerやdocumentではありませんでした。ただ、「HTMLDocument」など、IE関連っぽいものなので、もしかするとこれらが実はdocumentクラスのメンバなのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

確かにDocument「プロパティ」は、Object型の定義なので、オブジェクトブラウザだけでは確認が難しいですね。

私の場合、IEでスクレイピングをする際には、以下の3個のタイプライブラリ(参照設定で指定する物)を参照します。

  • Microsoft Internet Controls(SHDocVw)

InternetExplorerそのものの操作

  • Microsoft HTML Object Library(MSHTML)

HTMLの操作

  • Microsoft Shell Controls And Automation(Shell32)

既存のIEの探索

この3つは私の経験則上必要なものであり、自分が使った範囲では足りていると思いますが、場合によっては追加が必要かもしれません。
しかし、ie.document.body.InnerTextie.document.getElementById("Button")を探すうえでは上記で足りるはずです。


オブジェクトブラウザだけでは確認が難しい、となると実際に実行してみてどのような中身が入るのかを確認するのが一つの手段となります。

以下のコードを実行した場合を例として確認方法を見ていきます。

vba

1'SHDocVw = Microsoft Internet Controls 2'MSHTML = Microsoft HTML Object Library 3'Shell32 = Microsoft Shell Controls And Automation 4 5Sub teratail255119() 6 Dim ie As SHDocVw.InternetExplorer 7 Set ie = VBA.Interaction.CreateObject("InternetExplorer.Application") 8 ie.Visible = True 9 ie.navigate "https://www.google.com/" 10 11 Do Until ie.readyState = SHDocVw.tagREADYSTATE.READYSTATE_COMPLETE 12 VBA.Interaction.DoEvents 13 Loop 14 15 'ie.documentがMSHTML.HTMLDocument型の変数に代入可能なCOMオブジェクトかどうか。 16 Debug.Print TypeOf ie.document Is MSHTML.HTMLDocument 17 18 Dim htmlDoc As MSHTML.HTMLDocument 19 Set htmlDoc = ie.document 20 21 Stop 'ブレークポイント 22 23End Sub

上記のコードを実行すると、Stopステートメントで動作が止まると思いますので、その時点のie変数を「ローカルウィンドウ」で確認してみます(以下の画像)。

イメージ説明

ローカルウィンドウから、DocumentはObject型のプロパティだが、中身にHTMLDocumentが入っていることがわかります。

「HTMLDocument」で調べると、MSHTMLライブラリにHTMLDocumentという型が含まれているのがわかります。しかし、表示上の型名は被ることがあるのでこの時点ではまだ何とも言えません。

では、ie.DocumentMSHTML.HTMLDocumentどうかを確認するために、MSHTML.HTMLDocument型の変数にie.Documentを代入してみます(判定だけならTypeOf オブジェクト式 Is 型でもいいですが変数に入れたほうがわかりやすいので)。

vba

1 Dim htmlDoc As MSHTML.HTMLDocument 2 Set htmlDoc = ie.document

代入を行うと、エラーが発生しないためie.Documentの中身がMSHTML.HTMLDocumentであることがわかります。

あとは、htmlDocに対する入力補完や、オブジェクトブラウザの表示から類推していけば何とかなるでしょう。

イメージ説明

投稿2020/04/21 09:54

imihito

総合スコア2166

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

exnjinia

2020/04/22 11:44

画像までつけていただいてありがとうございます。 調べ方の勉強になりました!
guest

0

初めまして

VBAでもDOM操作をしているようなので、ネットで検索されるとよいかもしれません。
(DOM操作とかjavascriptとか…)

解説が書いてあるサイトがありましたので記載いたします。
VBAのIEエレメント基本操作

投稿2020/04/21 00:39

na-01

総合スコア99

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

exnjinia

2020/04/22 11:43

ありがとうございます! リンク先のサイト、勉強になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問