WebBrowserコントロールででHTMLの全ソースを取得するには?

解決


chacha  2003-12-14 04:38:22  No: 110668

WebBrowserコントロールで、Documentプロパティを使えば、
htmlのbodyについては、ソースが取得できることは、わかっ
たのですが、headの情報も得たいのです。ご存知の方、おら
れたら、お教えください。


魔界の仮面弁士  2003-12-14 05:54:18  No: 110669

documentオブジェクトをIPersistFileインターフェイスに渡し、
その後、saveメソッドにてソースを取得するのが一般的かと。

# サンプルは、以前、[VBレスキュー]の掲示板に書いたような。


chacha  2003-12-14 09:56:05  No: 110670

>魔界の仮面弁士さん

試してみましたが、bodyのテキスト部分しか保存されませんでした。
使ったプログラムは、次のとおりです。

    Dim pf As IPersistFile
    Set persist = WebBrowser1.Document
    pf.Save "a.txt", APITRUE

手順に間違いがあるのでしょうか。


mady  2003-12-14 11:30:13  No: 110671

詳しくないのに書きます。(しかも役には立たないかも)

Documentプロパティではbodyの情報しか得られないかのような記述ですが、
body、headの区別はそもそもなく、どちらでも情報を取得することは可能です。

例えばheadの子要素であるtitleは取れるはずです。
(それくらいしかないかもしれませんが…)


魔界の仮面弁士  2003-12-14 11:45:46  No: 110672

> bodyのテキスト部分しか保存されませんでした。
そのコードの、「Set persist = 」ではなく、「Set pf = 」に変えて見たら、
body部だけではなく、HTML文書のタイトル部(/html/head/title)も保存されましたよ。

> 手順に間違いがあるのでしょうか。
txt形式で取得せず、「pf.Save "C:\a.htm", False」の方が良いのでは。

あるいは IPersistFileの替わりに、IPersistStreamInitを使って見るとか。


chacha  2003-12-14 18:21:51  No: 110673

「Set persist = 」は、「Set pf = 」の転記ミスでした。
申し訳ありません。
また、「pf.Save "C:\a.htm", False」としても、結果は
同じでした。

IPersistStreamInitに関しては、まだ、試せていません。

私はあまりHTMLについて詳しくないので、的外れかも
しれませんが、WebBrowserのDocumentは、DOMに対応した
オブジェクトで、そもそもHeadの情報を含んでいないのでは
ないかとも思います。それともバージョンによる違いが
あるのでしょうか。


chacha  2003-12-14 20:39:44  No: 110674

解決しました。

最初、
Webbrowser.Document.Body.outerHTML
という形式で表示しようとしていたのですが、これでは、
BodyをHeadに変えることができなかたのです。しかし、
Webbrowser.Document.documentElement.outerHTML
とするだけで、Headを含めて、ソースを取得できる
ことがわかりました。

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


魔界の仮面弁士  2003-12-15 00:52:31  No: 110675

> また、「pf.Save "C:\a.htm", False」としても、結果は
> 同じでした。
うぅむ……そうですか、残念。
# 当方だと、.txtならテキスト形式になりますが、
# それ以外のファイル名では、HTMLそのままで保存されたのですが…。

> IPersistStreamInitに関しては、まだ、試せていません。
IPersistFileの場合と、手順は全く一緒ですよ。
コーディング上の違いは、Saveの第1引数が「ファイル名」ではなく、
「ストリーム」(ADOの「ADODB.Stream」などでもOK)になるというだけです。

> Webbrowser.Document.documentElement.outerHTML
ただしouterHTMLだと、コメント情報やDOCTYPEなどが抜け落ちたり、
本来は小文字で書かれた要素名が、大文字に変換されるなどの弊害があります。
# 文字コードも変化してしまいますし。

で、IPersistFile や IPersistStreamInit を使えば、
そのような問題は発生しない、という事で。


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

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






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