ブラウザ上のHTMLを変数に入れたいのですが。。。

解決


ペンギンくん  2005-07-12 11:27:33  No: 123447

度々申し訳ありません。
また分からないことが出てしまいました。(><;)

IE = CreateObject("InternetExplorer.Application")
IE.Navigate(Url)
でインターネットエクスプローラーを開いて
その中の
下記のようなコードで<a href="JavaScript:mySubmit('10')">テスト</a>
というリンクをクリックして表示されたページの内容(htmlのテキスト部分)を
変数Html1に読み込みたいのですが、空っぽになってしまいます。
対象のページはJavascriptやhtmlが書かれています。

試しに
Dim a As String = "http://www.yahoo.com"
でやると正常に読み込まれるのですが、
この場合どこを修正したらできるでしょうか?
またなにかのアドバイスを頂けたら助かります。m(_ _"m)ペコリ

        Dim a As String = "javascript:Submit('10')"
        With IE
            .Navigate(a)

            Do While .Busy = True
            Loop
            Do While .document.ReadyState <> "complete"
            Loop

            Dim Html1
            Dim body As Object
            Dim Doc As Object = CallByName(IE, "Document", CallType.Get)

            Try
                body = CallByName(Doc, "body", CallType.Get)
                Html1 = CallByName(body, "innertext", CallType.Get)
            Finally
                If Not IsNothing(body) Then
                    Marshal.ReleaseComObject(body)
                End If
                body = Nothing
            End Try


ペンギンくん  2005-07-12 11:34:07  No: 123448

すみません。書き忘れてしまいました。
VB.NETでやっております。


魔界の仮面弁士  2005-07-12 19:20:23  No: 123449

DHTMLの動作により、ブラウザ上のHTML構造は、
スクリプトの実行結果の影響を受けますよね。

ペンギンくんさんが知りたいのは、IEを右クリックしたときの
『ソースの表示』で表示される、元々のHTMLですか?
それとも、DHTML操作の影響を受けた後のHTMLですか?

前者であれば、IPersistStreamInitインターフェイスを使います。
後者であれば、.documentElement.outerHTML で取得できます。

また、フレームを切ってあるページの場合は、各フレームごとに
ソースを取得する必要があります。(面倒なので、サンプルは省略(^^;))


ペンギンくん  2005-07-15 06:18:58  No: 123450

魔界の仮面弁士さん。アドバイスありがとうございます。

得たいのは右クリックで表示される分なので、
IPersistStreamInitを使ってやってみたいと思います。

ありがとうございました。


ペンギンくん  2005-07-15 09:50:24  No: 123451

こんばんは。
IPersistStreamInitについていろいろ調べてみたのですが、
良く分からず、IPersistFileの下記の例があったので試してみたのですが、
これだとテキスト部分を抜き取ってしまいました。
HTMLを読み取るにはどこを変えたら良いでしょうか?
もしIPersistStreamInitでないとできないというのであれば、
ヒントだけ教えて頂けると助かります。

Dim a As String = "javascript:Submit('10')"
        With IE
            .Navigate(a)

            Do While .Busy = True
            Loop
            Do While .document.ReadyState <> "complete"
            Loop

                'IPersistFileインターフェイスにて保存()
                Dim PF As UCOMIPersistFile = DirectCast(IE.document, UCOMIPersistFile)
                PF.Save("c:\testhtml.txt", False)


魔界の仮面弁士  2005-07-15 10:15:15  No: 123452

> これだとテキスト部分を抜き取ってしまいました。

*.txt ではなく、*.html または *.htm ファイルに保存しましょう。


ペンギンくん  2005-07-16 07:57:21  No: 123453

できました!
ファイル名を変えると内容が変わるなんて思いませんでした。(><)
助かりました。ありがとうございました。


ペンギンくん  2005-07-16 08:59:50  No: 123454

できました!
お騒がせして申し訳ありませんでした。


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

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






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