WebBrowserコントロールで、Documentプロパティを使えば、
htmlのbodyについては、ソースが取得できることは、わかっ
たのですが、headの情報も得たいのです。ご存知の方、おら
れたら、お教えください。
documentオブジェクトをIPersistFileインターフェイスに渡し、
その後、saveメソッドにてソースを取得するのが一般的かと。
# サンプルは、以前、[VBレスキュー]の掲示板に書いたような。
>魔界の仮面弁士さん
試してみましたが、bodyのテキスト部分しか保存されませんでした。
使ったプログラムは、次のとおりです。
Dim pf As IPersistFile
Set persist = WebBrowser1.Document
pf.Save "a.txt", APITRUE
手順に間違いがあるのでしょうか。
詳しくないのに書きます。(しかも役には立たないかも)
Documentプロパティではbodyの情報しか得られないかのような記述ですが、
body、headの区別はそもそもなく、どちらでも情報を取得することは可能です。
例えばheadの子要素であるtitleは取れるはずです。
(それくらいしかないかもしれませんが…)
> bodyのテキスト部分しか保存されませんでした。
そのコードの、「Set persist = 」ではなく、「Set pf = 」に変えて見たら、
body部だけではなく、HTML文書のタイトル部(/html/head/title)も保存されましたよ。
> 手順に間違いがあるのでしょうか。
txt形式で取得せず、「pf.Save "C:\a.htm", False」の方が良いのでは。
あるいは IPersistFileの替わりに、IPersistStreamInitを使って見るとか。
「Set persist = 」は、「Set pf = 」の転記ミスでした。
申し訳ありません。
また、「pf.Save "C:\a.htm", False」としても、結果は
同じでした。
IPersistStreamInitに関しては、まだ、試せていません。
私はあまりHTMLについて詳しくないので、的外れかも
しれませんが、WebBrowserのDocumentは、DOMに対応した
オブジェクトで、そもそもHeadの情報を含んでいないのでは
ないかとも思います。それともバージョンによる違いが
あるのでしょうか。
解決しました。
最初、
Webbrowser.Document.Body.outerHTML
という形式で表示しようとしていたのですが、これでは、
BodyをHeadに変えることができなかたのです。しかし、
Webbrowser.Document.documentElement.outerHTML
とするだけで、Headを含めて、ソースを取得できる
ことがわかりました。
お騒がせして、申し訳ありませんでした。
> また、「pf.Save "C:\a.htm", False」としても、結果は
> 同じでした。
うぅむ……そうですか、残念。
# 当方だと、.txtならテキスト形式になりますが、
# それ以外のファイル名では、HTMLそのままで保存されたのですが…。
> IPersistStreamInitに関しては、まだ、試せていません。
IPersistFileの場合と、手順は全く一緒ですよ。
コーディング上の違いは、Saveの第1引数が「ファイル名」ではなく、
「ストリーム」(ADOの「ADODB.Stream」などでもOK)になるというだけです。
> Webbrowser.Document.documentElement.outerHTML
ただしouterHTMLだと、コメント情報やDOCTYPEなどが抜け落ちたり、
本来は小文字で書かれた要素名が、大文字に変換されるなどの弊害があります。
# 文字コードも変化してしまいますし。
で、IPersistFile や IPersistStreamInit を使えば、
そのような問題は発生しない、という事で。
ツイート | ![]() |