2013-01-22 77 views
1

我想以編程方式(WPF,C#)登錄到我的財務帳戶網站(https)並檢索我的一些帳戶數據。由於該網站使用cookie和其他會話驗證,我認爲最好的方法是使用網頁瀏覽器控件,而不是httpWebRequest。我似乎無法捕捉屏幕內容。捕獲網頁內容wpf網頁瀏覽器

我能夠使用winforms成功地做到這一點,但我想在WPF中做到這一點。下面是從WinForms項目的代碼片段:

webBrowser1.Navigate(@"https://myfinancialaccountURL"); 
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(
                 wb1DocumentCompleted); 

private void wb1DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    string wb1LogonScreen = webBrowser1.DocumentText; 

    --- process the data, etc. --- 
} 

這裏從WPF嘗試的代碼片段:

webBrowser1.Navigated += new NavigatedEventHandler(webBrowser1_Navigated); 
webBrowser1.Navigate(@"https:myfinancialaccountURL"); 

我已經廣泛地研究了WPF Web瀏覽器控件,它有一個文檔屬性,但我不知道如何獲取內容(或內部文本)。

我已經研究了這個,但我仍然無法找到答案。請告訴我是否需要提供更多信息。我非常感謝這裏的一些幫助。

感謝名單

回答

1

您可以讀取文檔屬性作爲MSHTML.Document,然後用它來獲取文本。您需要將Microsoft.mshtml庫包含在您的項目中。

mshtml.HTMLDocument doc = null; 
     string docState = string.Empty; 

     // CODE TO ENSURE THAT THE DOCUMENT AND THE SCRIPTS HAVE LOADED 
     Action getDocState =() => 
     { 
      doc = wb.Document as mshtml.HTMLDocument; 
      if (null != doc) 
      { 
       docState = doc.readyState; 
      } 
     }; 

     App.Current.Dispatcher.Invoke(
        DispatcherPriority.Normal, 
        getDocState); 


     if (null != doc) 
     { 
      while ((docState != "complete") && (docState != "interactive")) 
      { 
       // It should not take more than one or two iterations for the document to get loaded. 
       Thread.Sleep(100); 
       App.Current.Dispatcher.Invoke(
        DispatcherPriority.Normal, 
        getDocState); 
       } 
      } 
     // DOC SHOULD BE LOADED AND READABLE NOW 

      // Go back to the UI thread to get more details 
      if (!App.Current.Dispatcher.HasShutdownStarted) 
      { 
       // This line is of your interest here 
       MessageBox.Show(doc.documentElement.innerHTML); 
      } 
     } 

編輯:您可以在導航的事件處理程序使用此代碼。我等待文檔加載代碼的原因是,一旦WPF加載/導航完成,Web瀏覽器將加載HTML和腳本等。此腳本確保文檔已完全加載並處於可與之交互的狀態它。

+0

謝謝。我會試一試並報告結果。 – user2000900

+0

我知道這個答案永遠不會被提問者選中,但我只是試了一下,它的工作原理! – Tronald