У меня есть файлы, которые были отображены в режиме просмотра, а затем я использовал File, Save As .., чтобы поместить текст в локальный файл. На странице есть несколько сценариев, и она не будет отображаться правильно в WebBrowserControl в WinForm. Проблема заключается в том, что скрипты, поскольку в элементе управления отображаются диалоги ошибок сценария. Мне действительно не нужно просматривать файл, но просто получить несколько элементов по идентификатору.Прочитать HTML-файл в VB.Net
Первый блок кода ниже загружает файл в локальный объект, но только первые 4096 байт. (То же самое происходит, если я использую WebBrowser житель на форме.)
Второй блок не жалуется, но GetElementByID терпит неудачу как искомый элемент находится за пределами первого 4096.
Dim web As New WebBrowser
web.AllowWebBrowserDrop = False
web.ScriptErrorsSuppressed = True
web.Url = New Uri(sFile)
Dim doc As HtmlDocument
Dim elem As HtmlElement
doc = web.Document
elem = doc.GetElementById("userParts")
Что я делаю неправильно?
Есть ли лучший способ для проекта VB.Net WinForm для загрузки HTML-документа, из которого я могу читать элементы?
Я просто пошел с строковыми функциями для простой задачи под руку:
Function GetInnerTextByID(html As String, elemID As String) As String
Try
Dim s As String = html.Substring(html.IndexOf("<body>"))
s = s.Substring(s.IndexOf(elemID))
s = s.Substring(s.IndexOf(">") + 1)
s = s.Substring(0, s.IndexOf("<"))
s = s.Replace(vbCr, "").Replace(vbLf, "").Trim
Return s
Catch ex As Exception
Return ""
End Try
End Function
я бы до сих пор заинтересован в подходе родную VB.Net (не ASP). Или почему OP загружает только 4096 байт.
Вы можете использовать ['HtmlAgilityPack'] (http://htmlagilitypack.codeplex.com/) –
Правда - но слишком сложная для моего простого t попросите извлечь несколько элементов по идентификатору. – rheitzman
Он также имеет метод document.GetElementById, который довольно прост. И у него нет никаких странных проблем со сценариями или байтами. Просто загрузите документ из сети, файла или обычной строки. –