HtmlAgilityPack의 소스 HtmlDocument로 explorer.document 사용

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

문제

HtmlAgilityPack의 HtmlDocument 로 Internet Explorer에서 현재로드 된 웹 페이지를 사용하고 싶습니다. COM 개체로 mshtml을 통해 탐색기 문서를 사용하고 있습니다.

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

그런 다음 HtmlAgilityPack에서 사용하는 HtmlDocument로 변환하려고했습니다.

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

하지만 잘못된 캐스트 작업으로 인해 작동하지 않습니다. 예외 메시지는 아래와 같습니다.

예외 메시지

어쨌든 현재로드 된 웹 페이지를 htmlagilitypack의 소스로 사용하고 싶습니다. htmlaglet을 제공하고 현재 URL을로드하여 HtmlWeb을 사용할 수 있지만로드 된 페이지 (htmlagilitypack을 사용하여 찾은 요소)에있는 요소를 강조하고 싶습니다. 그런 종류의 구현을 통해 수행됩니다. 이 모든 지원을 구현하기위한 아이디어는 훌륭합니다. 감사.

수락 된 답변

물론 mshtml.HTMLDocumentHtmlAgilityPack.HtmlDocument 사이에서 mshtml.HTMLDocument 할 수는 없지만 다른 라이브러리의 완전히 다른 클래스입니다. 하나는 순수하게 관리되고 다른 하나는 관리되는 COM 래퍼입니다.

할 수있는 일은 mshtml.HTMLDocument 에서 HTML을 가져 mshtml.HTMLDocument 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는 합법적입니까? 예, 이유를 알아보십시오.