読者です 読者をやめる 読者になる 読者になる

三流君 ken3のmemo置き場

メモ置き場、保管庫として利用。まとまっていませんがヨロシク



参照設定してAS HTMLIFrameからインラインフレームの.srcを探ってみた

VBA IE操作

下記の質問をいただきました。


>下記のコードでホームページの中の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

テストで使ったソース

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 を見てください。
(追加で探ってみたいと思います。)