2013-10-29 36 views
1

我正在尋找一個免費的工具,或者說我可以用它來寫我自己的代碼在.NET來處理某些Web請求的DLL。 比方說,我有一些查詢字符串參數類似於http://www.example.com?param=1一個URL,當我在瀏覽器中使用它會出現幾個重定向和最終的HTML渲染具有框架和框架的內部HTML包含數據的表,我需要。我想將這些數據以CSV格式存儲在外部文件中。很顯然,根據查詢字符串參數param,數據不同。假設我想運行該應用程序,並生成1000個CSV文件,參數值從1到1000.獲取HTML使用WebBrowser控件框架 - unauthorizedaccessexception

我對.NET,JavaScript,HTML有很好的瞭解,但主要問題是如何獲得最終的HTML服務器代碼。

我想什麼是我創建了一個新的窗體應用程序,添加一個WebBrowser控件和使用這樣的代碼:

private void FormMain_Shown(object sender, EventArgs e) 
    { 
     var param = 1; //test 
     var url = string.Format(Constants.URL_PATTERN, param); 

     WebBrowserMain.Navigated += WebBrowserMain_Navigated; 
     WebBrowserMain.Navigate(url); 
    } 

    void WebBrowserMain_Navigated(object sender, WebBrowserNavigatedEventArgs e) 
    { 
     if (e.Url.OriginalString == Constants.FINAL_URL) 
     { 
      var document = WebBrowserMain.Document.Window.Frames[0].Document; 
     } 
    } 

但不幸的是我receieve unauthorizedaccessexception因爲大概框架和文檔都在不同的領域。有沒有人有如何解決這個問題的想法,也許是另一種全新的方法來實現這樣的功能?

+0

目前尚不清楚,你想執行服務器端這個Winforms應用程序? – Noseratio

+0

我無法訪問服務器,這是我構建並從客戶端調用的Winforms應用程序,它嘗試通過URL導航到外部服務器以獲取我無法控制的HTML。然後我需要處理HTML以獲取必要的表格數據。 –

+0

嘗試處理'DocumentCompleted'而不是'Navigated'。更好的是,你在首頁的DOM'window.onload'事件之後。檢查此更多細節:http://stackoverflow.com/a/19283143/1768303 – Noseratio

回答

2

得益於Noseratio的意見,我成功地做到這一點與WebBrowser控件。以下是可能幫助其他人誰也有類似的問題,一些要點:應

1)DocumentCompleted事件。對於文檔的導航事件正文爲NULL。

2)以下的答案幫助了很多:WebBrowserControl: UnauthorizedAccessException when accessing property of a Frame

3)我不知道有關IHTMLWindow2類似的接口,爲他們正常工作,我加入到下面的COM庫的引用:)Microsoft Internet控制(SHDOCVW,微軟HTML對象庫(MSHTML)。

4)我抓住用下面的代碼框架的HTML:

void WebBrowserMain_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
     if (e.Url.OriginalString == Constants.FINAL_URL) 
     { 
      try 
      { 
       var doc = (IHTMLDocument2) WebBrowserMain.Document.DomDocument; 
       var frame = (IHTMLWindow2) doc.frames.item(0); 
       var document = CrossFrameIE.GetDocumentFromWindow(frame); 
       var html = document.body.outerHTML; 

       var dataParser = new DataParser(html); 
       //my logic here 
      } 

5)帶有HTML的工作,我用細HTML Agility Pack有一些不錯的XPath搜索。

相關問題