[リストへもどる]
一括表示

投稿時間:2003/10/15(Wed) 21:59
投稿者名:zoo8
Eメール:
URL :
タイトル:
HTMLを取得できません
フレームを使ったページの中の目的のフレームのソースを以下のようなVBのコードで取得したいのですがうまくいきません。
debug実行ではファイルの中にHTMLソースが書き出されますが、通常どおりに実行すると中身は空のままです。
その目的のフレームは最初表示されたときはJavascriptで
onload時にlocateでソースを取得しなおしているので、ここが問題なのかと思うのですが。
取得の方法はファイルに保存、コード中で参照でもどちらでもいいです。
よろしくお願いします。


Dim objIE     As InternetExplorer  
Dim k         As Integer
Dim objFRAME  As FramesCollection
Dim objDOC    As IHTMLDocument      
Dim strFullPath As String
Dim fileNumber As Variant

Set objIE = CreateObject("InternetExplorer.application")
objIE.Navigate "http://example.com"

'表示終了まで待つ
Do While objIE.Busy = True
DoEvents
Loop


Set objFRAME = objIE.Document.frames  'フレームの代入
Set objDOC = objFRAME(3).Document 'フレームのドキュメントをセット

' ファイル生成
strFullPath = App.Path & "\" & "work"
fileNumber = FreeFile

Open strFullPath For Output Shared As fileNumber

For k = 0 To objDOC.All.length - 1
Print #fileNumber, objDOC.All(k).outerHTML
Next k

Close fileNumber

投稿時間:2003/10/15(Wed) 22:45
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: HTMLを取得できません
完全に表示しきらない内に取得しているからではないでしょうか?
私のトップページならそのままで取得できましたが。
下記を入れて見たらどうでしょう。
Do While objIE.Document.readyState <> "complete"
    DoEvents
Loop

投稿時間:2003/10/16(Thu) 09:56
投稿者名:zoo8
Eメール:
URL :
タイトル:
Re^2: HTMLを取得できません
ありがとうございます。無事にHTMLソースを取得できました。
Do While objIE.Busy = True
で読み込み終了まで待つことができると思ってたのですが、違ったようですね。

投稿時間:2003/10/16(Thu) 12:55
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^3: HTMLを取得できません
取得のタイミングによっては、DocumentプロパティからNothing が返される事があるため、
『Do Until objIE.Document.readyState = "complete"』だけですと、実行時エラー91が
発生する事もありえます。

可能であれば、objIEをWithEventsで宣言して、DocumentCompleteイベントを利用された方が良いでしょう。
http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200310/03100037.txt

もし、イベントを使わず、ループで待機させるのであれば、

   1.  『.Busy = False』まで待機してから、
   2.  『Not .Document Is Nothing』まで待機し、最後に
   3.  『.Document.readyState = "complete"』まで待機する。

のように、監視ループを3つ用意しておく事をお奨めします。


ちなみに、Documentプロパティから返されるのは、HTMLをDOMとして解析した結果なので、
本来のHTMLソースとは異なった物になります。
元のHTMLソースを得たい場合は、下記を参照してみてください。
http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200310/03100017.txt

> Do While objIE.Busy = True
> で読み込み終了まで待つことができると思ってたのですが、違ったようですね。
Busyプロパティから分かるのは、HTML文書をダウンロードしおわった、という事までです。
ダウンロードした文書が、Documentプロパティとして完全に解析されたかどうかを示すわけではありません。
(HTMLの解析はInternetExplorerではなく、MSHTMLによって行われます)

投稿時間:2003/10/16(Thu) 16:16
投稿者名:zoo8
Eメール:
URL :
タイトル:
Re^4: HTMLを取得できません
魔界の仮面弁士さん、丁寧な返信ありがとうございます。
なるほど、HTMLはダウンロード、解析と2段階なんですね。
だからJavaScriptのonLoadが実行されない時点でファイルを書き出していたのか。

Busyプロバティを調べていたのですがうまく見つけきれなかったので、見返しにきて本当によかった。