1. 程式人生 > >C# WebBrowser 程式設計 使用mshtml讀取網頁內容

C# WebBrowser 程式設計 使用mshtml讀取網頁內容

首先需要引用Microsoft.mshtml,AxInterop.SHDocVw
一些方法:

webBrowser.ScriptErrorsSuppressed = true;//允許指令碼除錯
webBrowser.WebBrowserShortcutsEnabled = true;//允許快捷鍵

/*********************一些事件的處理*******************/

webBrowser.CanGoForwardChanged += new EventHandler(webBrowser_CanGoForwardChanged);
webBrowser.CanGoBackChanged += new EventHandler(webBrowser_CanGoBackChanged);
webBrowser.StatusTextChanged += new EventHandler(webBrowser1_StatusTextChanged);
webBrowser.Navigating += new WebBrowserNavigatingEventHandler(webBrowser1_Navigating);
webBrowser.Navigated += new WebBrowserNavigatedEventHandler(webBrowser1_Navigated);
webBrowser.DocumentTitleChanged += new EventHandler(webBrowser1_DocumentTitleChanged);
webBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
webBrowser.Disposed += new EventHandler(webBrowser1_Disposed);
(webBrowser.ActiveXInstance as SHDocVw.WebBrowser).NewWindow3 += new SHDocVw.DWebBrowserEvents2_NewWindow3EventHandler(FrmIEExplorer_NewWindow3);

webBrowser.ProgressChanged += new WebBrowserProgressChangedEventHandler(webBrowser1_ProgressChanged);
/*********************************************************/

 private WebBrowser CreateNewWebBrowser()
 {
     WebBrowser _axWebBrowser = new WebBrowser();
     _axWebBrowser.Tag = new HE_WebBrowserTag();
     _axWebBrowser.Dock = DockStyle.Fill;
     TabPage _TabPage = new TabPage();
     _TabPage.Controls.Add(_axWebBrowser);
    
     RegisterEvent(_axWebBrowser);
     flatTabControl1.TabPages.Add(_TabPage);
     flatTabControl1.SelectedTab = _TabPage;
     _ActiveWebBrowser = _axWebBrowser;
     btn_Remove.Enabled = flatTabControl1.TabPages.Count >= 1;
     // tblCloseTab.Enabled = true;
     return _axWebBrowser;
 }
 /// <summary>
 /// 新視窗事件
 /// </summary>
 /// <param name="ppDisp"></param>
 /// <param name="Cancel"></param>
 /// <param name="dwFlags"></param>
 /// <param name="bstrUrlContext"></param>
 /// <param name="bstrUrl"></param>
 void FrmIEExplorer_NewWindow3(ref object ppDisp, ref bool Cancel, uint dwFlags, string bstrUrlContext, string bstrUrl)
 {
     Cancel = true;     
     ppDisp = (this._ActiveWebBrowser.ActiveXInstance as SHDocVw.WebBrowser).Application;//這裡是關鍵
     WebBrowser _axWebBrowser = CreateNewWebBrowser();
     _axWebBrowser.Navigate(bstrUrl);
 }

//讀取網頁內容

private void ReadDoc(IHTMLDocument2 doc)
{
    int inputcount = doc.all.length;
    foreach (IHTMLElement item in doc.all)
    {
        if (item.id == "_petName" || item.id == "userNameTopLine")
        {
            this.rich_src.AppendText("     id:");
            this.rich_src.AppendText(item.innerText);
        }
        //this.rich_src.AppendText("     id:");
        //this.rich_src.AppendText(item.id == null ? "未設定" : item.id);

        //this.rich_src.AppendText("     tag:");
        //this.rich_src.AppendText(item.tagName);

        //this.rich_src.AppendText("     innerHTML:");
        //this.rich_src.AppendText(item.innerHTML == null ? "未設定" : item.innerHTML);
        //this.rich_src.AppendText("\r\n-------------\r\n");

        if (item.tagName.Equals("FRAME"))
        {
            //this.rich_src.AppendText(" IFRAME    id:");
            //this.rich_src.AppendText(item.id == null ? "未設定" : item.id);
            //this.rich_src.AppendText("\r\n-------------\r\n");
            mshtml.IHTMLFrameBase2 iFrame = (mshtml.IHTMLFrameBase2)item;
            mshtml.IHTMLDocument2 iHTMLDocument2 = iFrame.contentWindow.document;
            ReadDoc(iHTMLDocument2);

        }
    }
}
下面2句程式碼獲取IHTMLDocument2

IHTMLDocument2 doc = _ActiveWebBrowser.Document.DomDocument as IHTMLDocument2;
ReadDoc(doc);