WebBrowserに表示されたHPのHTMLソースを取得したいと思い
WebBrowser1.Navigate "アドレス"
RichTextBox1 = WebBrowser1.Document.Body.outerhtml
としたのですが、実行すると
実行時エラー91
オブジェクト変数、またはWithブロック変数が設定されていません
とエラーが出てしまいます。
なにをどのように設定したらいいのか具体的に教えてください。
よろしくお願いします。
RichTextBox1読み込みは、そこに書くのはちょっとかわいそう
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
RichTextBox1 = WebBrowser1.Document.Body.outerhtml
End Sub
ここに書きます。
ねろさん、ありがとうございます。
ソースを取得することができました。
もう一つ質問があるのですが、いくつかのHPアドレスがobjListBoxに
あるとして
For i = 0 To objListBox.ListCount - 1
WebBrowser1.Navigate objListBox.List(i)
next i
このようにfor文でまわして、その都度HTMLソースを取得したい
のですが、さきほど教えていただいた方法だとリストボックスに
ある最後のHPアドレスのソースしか取れませんでした。
リストボックスにあるすべてのHPのソースを取得したいのですが
どうしたら良いでしょうか?
よろしくお願いします。
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!
丁寧な説明ありがとうございました。
いろいろ試してみます!
すいません。解決をチェックするの忘れました。。
ツイート | ![]() |