下記の質問をいただきました。
>下記のコードでホームページの中のiframeを回して「src」に記載してある相対パスの
>絶対パスを知りたいと思い試行錯誤しています。
>
>For Each objITEM In objIE.Document.getElementsByTagName("iframe")
> Debug.Print objITEM.src
>Next
>
>上記コードの場合、相対パスがsrcに設定されている場合の絶対パスが知りたいと考えています。
>デバッグモードでobjITEMの直下に「ie8_src」というプロパティがあり、絶対パスらしきものがあるのですが、
>objITEM.ie8_srcとしてもエラーになってしまい取り出せません。
>何か方法はありますでしょうか?
>
>os xp
>ブラウザ ie8
いつものハマったテスト動画
下記、いつものハマったテスト動画です。
VBA IE操作 iframeを参照設定してAS HTMLIFrameから探る - YouTube
www.youtube.com
テストで使ったソース
Option Explicit Sub ietest_0120_1() 'インラインフレームを探る Dim objIE As Object 'IEのオブジェクトを作成する Set objIE = CreateObject("InternetExplorer.application") objIE.Top = 250 objIE.Left = 250 objIE.Width = 800 objIE.Height = 400 objIE.Visible = True 'ページを開く(.Navigateで表示する。) objIE.Navigate "http://dec2011.top1-12.info/test0120.html" '読み込み完了となるまで、ループする。 While objIE.ReadyState <> 4 Or objIE.Busy 'READYSTATE_COMPLETE = 4 DoEvents Wend 'iframeのタグを集める .getElementsByTagName("iframe")を使用 Dim objIFRAME As Object Set objIFRAME = objIE.document.getElementsByTagName("iframe") Debug.Print TypeName(objIFRAME(0)) 'オブジェクトのタイプを確認。 Dim oHTMLIFrame As HTMLIFrame 'HTMLIFrame 参照設定後型宣言すると便利 Dim n As Integer For n = 0 To objIFRAME.Length - 1 '配列が0からなので-1 Set oHTMLIFrame = objIFRAME(n) 'n番目を代入 Debug.Print oHTMLIFrame.src Next n 'IEを閉じたり、後始末 objIE.Quit 'デバックなのでコメントアウト IEを閉じたり、後始末をする End Sub
簡単な解説
http://dec2011.top1-12.info/test0120.html
↑に、iframeを2つ使ったテスト用のhtmlを置く。
参照先は、
同じドメインの iframe/itest1.html
と
違うドメインの http://nov2011.s2009mmdd.com/iframe2/itest2.html
を使用してみた。
objIE.Navigate "http://dec2011.top1-12.info/test0120.html"
で、ページを読み込み後、
Set objIFRAME = objIE.document.getElementsByTagName("iframe")
で、iframeを集める(.getElementsByTagNameが複数のコレクションを返す)
次に、型を調べたかったので、
Debug.Print TypeName(objIFRAME(0)) 'オブジェクトのタイプを確認。
で、オブジェクトのタイプを確認。
確認すると、
HTMLIFrame
だったので、参照設定
三流君VBAでIE操作 まずは、参照設定から
を行い、Dim 変数 As HTMLIFrame を 使うと便利です。
ループの回し方はイロイロあるのですが、
今回は、n番目を代入して使ってみました。
For n = 0 To objIFRAME.Length - 1 '配列が0からなので-1 Set oHTMLIFrame = objIFRAME(n) 'n番目を代入 Debug.Print oHTMLIFrame.src Next n
↑みたいな感じで、いったん代入してから .srcで デバッグ表示してみました。
終わりのあいさつ
.getElementsByTagName iframe でインラインフレームのタグを集めて、
参照設定後、
AS HTMLIFrameを使い、
プロパティを探る、そんな方法のテスト解説です。
※途中nのカウンターで本人ハマってしまいましたが、反面教師としてそのまま動画を残しました。
少しでもIE操作でプロパティなどを探すヒントとなれば幸いです。
あっ、間違えた。。。
回答として、聞きたかったのは、
相対パスがsrcに設定されている場合の絶対パスが知りたい
でした。
.srcだと、相対パスのままでした。
続きは http://d.hatena.ne.jp/ken3memo/20120121/1327086498 を見てください。
(追加で探ってみたいと思います。)