HtmlAgilityPackのソースHtmlDocumentとしてexplorer.documentを使用する

c# html-agility-pack internet-explorer microsoft.mshtml mshtml

質問

私はHtmlAgilityPackのHtmlDocumentとしてHtmlDocumentで現在ロードされているWebページを使用したい。私はCOMオブジェクトとしてmshtmlを通じてエクスプローラ文書を使用しています。

mshtml.HTMLDocument doc = explorer.Document as mshtml.HTMLDocument;

それから私はそれをHtmlAgilityPackで使用しているHtmlDocumentに変換しようとしました

mshtml.HTMLDocument doc = explorer.Document as mshtml.HTMLDocument;

しかし、無効なキャスト操作のために機能していません。例外メッセージを以下に示します。

例外メッセージ

とにかく、現在ロードされているWebページをhtmlagilitypackのソースとして使用したいのですが、htmlagilityパックで提供されている現在のurlを使用できますが、そのような実装を介して行う必要があります。このサポートを実装するためのアイデアは素晴らしいものになります。ありがとう。

受け入れられた回答

もちろん、 mshtml.HTMLDocumentHtmlAgilityPack.HtmlDocument間でキャストすることはできません。これらは、異なるライブラリの完全に異なるクラスです.1つは純粋に管理され、もう1つは管理されたCOMラッパーです。

あなたができることは、 mshtml.HTMLDocumentからHTMLを取得し、それをAgility Packにロードすることです。

おそらくこれらの行に沿った何か:

  mshtml.IHTMLDocument3 sourceDoc = (mshtml.IHTMLDocument3) explorer.Document;  
  string documentContents = sourceDoc.documentElement.outerHTML; 

  HtmlAgilityPack.HtmlDocument targetDoc = new HtmlAgilityPack.HtmlDocument();

  targetDoc.LoadHtml(documentContents);

IPersistStreamを使用し、Saveメソッドを呼び出してMemoryStreamを渡し、HtmlAgilityPackに渡すこともできます。




ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ