WebBrowserでHTMLソースを表示するには?

解決


小鳥  2003-11-21 00:12:58  No: 110100

WebBrowserに表示されたHPのHTMLソースを取得したいと思い

WebBrowser1.Navigate "アドレス"
RichTextBox1 = WebBrowser1.Document.Body.outerhtml

としたのですが、実行すると
実行時エラー91
オブジェクト変数、またはWithブロック変数が設定されていません
とエラーが出てしまいます。
なにをどのように設定したらいいのか具体的に教えてください。
よろしくお願いします。


ねろ  2003-11-21 02:09:20  No: 110101

RichTextBox1読み込みは、そこに書くのはちょっとかわいそう

Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    RichTextBox1 = WebBrowser1.Document.Body.outerhtml
End Sub
ここに書きます。


小鳥  2003-11-21 02:32:43  No: 110102

ねろさん、ありがとうございます。
ソースを取得することができました。

もう一つ質問があるのですが、いくつかのHPアドレスがobjListBoxに
あるとして

For i = 0 To objListBox.ListCount - 1
      WebBrowser1.Navigate objListBox.List(i)
      
next i

このようにfor文でまわして、その都度HTMLソースを取得したい
のですが、さきほど教えていただいた方法だとリストボックスに
ある最後のHPアドレスのソースしか取れませんでした。
リストボックスにあるすべてのHPのソースを取得したいのですが
どうしたら良いでしょうか?
よろしくお願いします。


ねろ  2003-11-21 06:16:08  No: 110103

Navigateコマンドを出してから、実際読みこまれるまで
時間が掛かるので、DocumentCompleteイベントを発行
するのです。
前の読み込みが終わらないうちのNavigat
コマンドを出せば前のを捨てて次のNavigateに移って
しまい、結局最後のHTMLしか取れないのです。
色々方法はありますが、FLGをグローバルで宣言して
Navigateコマンドを出したらFLGを立てて、
FLGがリセットされるまでDo〜Loopをまわし
LooPの中でFLGがリセットされたらテキストに取り
込み、Loopを抜けます。
FLGはDocumentComplete内でリセットします。
ただ一つ注意する点は、必ずしもNavigateが成功すつとは
限りません。成功しない場合はLoopを抜けませんから、
FLGを立てるとともにタイマーをかけて、ある一定以上
Navigateに時間が掛かる場合は、Loopを抜けて次の処理に
移るようにします。
Navigate  Do〜Loopは先に書かれている
For i = 0 To objListBox.ListCount - 1
Next
の中に入れます。
もう一つこの応用ですが、ホームページにより読み込み時間に
かなり差が有ります。読み込み時間の短縮の為に、複数の
WebBrowserを用意し読み込見が出来た順番に処理を完了していく
方法もあります。色々試してみてください。    後はGood luck!


小鳥  2003-11-21 20:40:59  No: 110104

丁寧な説明ありがとうございました。
いろいろ試してみます!


小鳥  2003-11-21 20:42:21  No: 110105

すいません。解決をチェックするの忘れました。。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加