2014-09-30 50 views
0

我有一些文件顯示在瀏覽器中,然後我使用文件,另存爲..將文本放置在本地文件中。該頁面有一些腳本,它不會在WinForm的WebBrowserControl中正確顯示。該問題似乎是腳本,因爲控件顯示「腳本錯誤」對話框。我並不需要查看該文件,而只需通過ID檢索一些元素。在VB.Net中讀取HTML文件

下面的第一塊代碼確實將文件加載到本地對象中,但只加載了前4096個字節。 (如果我使用一個WebBrowser居民在表單上同樣的情況。)

第二塊不抱怨,但由於所需的元素是超越第一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") 

我在做什麼了失敗的getElementById錯誤?

是否有一個更好的方法來加載一個HTML文檔,我可以從中讀取元素的VB.Net WinForm項目?


我只是很簡單的任務字符串函數就在眼前:

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字節。

+0

您可以使用['HtmlAgilityPack'](http://htmlagilitypack.codeplex.com/) – 2014-09-30 21:46:03

+0

正確 - 但對我簡單的t過於複雜通過ID提取幾個元素。 – rheitzman 2014-09-30 21:52:01

+1

它還有一個非常簡單的'document.GetElementById'方法。它沒有腳本或字節的奇怪問題。只需從網頁,文件或純字符串中加載文檔。 – 2014-09-30 21:57:27

回答

2

我會用HtmlAgilityPack來代替。

你:「的確如此 - 但對於我通過ID提取一些元素的簡單任務而言過於複雜。」

它也有一個相當簡單的方法document.GetElementbyId。它沒有腳本或字節的奇怪問題。只需從網頁,流,文件或純文本字符串中加載文檔即可。

例如(網絡):

Dim document As New HtmlAgilityPack.HtmlDocument 
Dim myHttpWebRequest = CType(WebRequest.Create("URL"), HttpWebRequest) 
myHttpWebRequest.UserAgent = "Mozilla/5.0 (compat ble; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)" 
Dim streamRead = New StreamReader(CType(myHttpWebRequest.GetResponse(), HttpWebResponse).GetResponseStream) 
Dim res As HttpWebResponse = CType(myHttpWebRequest.GetResponse(), HttpWebResponse) 
document.Load(res.GetResponseStream(), True) 

Dim node As HtmlNode = document.GetElementbyId("userParts") 

或從文件:

document.Load("Path") 

或從字符串(FE在由File.ReadAllText讀取的HTML文件一整個網頁):

document.LoadHtml("HTML")