Используйте explorer.document в качестве исходного HtmlDocument для HtmlAgilityPack
Я хочу использовать загруженную веб-страницу в Internet Explorer как HtmlDocument
в HtmlAgilityPack. Я использую документ Explorer через mshtml в качестве COM-объекта.
mshtml.HTMLDocument doc = explorer.Document as mshtml.HTMLDocument;
Затем я попытался преобразовать его в HtmlDocument, который используется в HtmlAgilityPack
HtmlAgilityPack.HtmlDocument hdoc = (HtmlAgilityPack.HtmlDocument)doc;
Но это не работает из-за неверной операции приведения. Сообщение об исключении показано ниже.
В любом случае я хочу использовать текущую загруженную веб-страницу в качестве источника для htmlagilitypack, я знаю, что могу использовать HtmlWeb, предоставляемый пакетом htmlagility, и загружать текущий URL, но я хочу выделить элементы, которые находятся на загруженной странице (элементы, найденные с помощью htmlagilitypack), я думаю, что это не может быть сделано с помощью такого рода реализации. Любые идеи для реализации любой поддержки будут отличными. Благодарю.
1 ответ
Конечно, вы не можете бросать между mshtml.HTMLDocument
а также HtmlAgilityPack.HtmlDocument
Это совершенно разные классы из разных библиотек, где одна является чисто управляемой, а другая - управляемой оболочкой COM.
Что вы можете сделать, это взять HTML из mshtml.HTMLDocument
и загрузите его в пакет Agility.
Возможно, что-то вроде этого:
mshtml.IHTMLDocument3 sourceDoc = (mshtml.IHTMLDocument3) explorer.Document;
string documentContents = sourceDoc.documentElement.outerHTML;
HtmlAgilityPack.HtmlDocument targetDoc = new HtmlAgilityPack.HtmlDocument();
targetDoc.LoadHtml(documentContents);
Вы также можете использовать IPersistStream
а затем вызвать метод Save, передать MemoryStream
и затем передайте это HtmlAgility Pack.