關於c#的webbrows控制項自動填寫表單並擷取提交後的網頁內容

來源:互聯網
上載者:User

由於項目需要,需要擷取網頁內容並自動填寫表單,所以決定使用webbrowser控制項。經過筆者一番百度,我再一次覺得,網上的內容少之又少,大多數都是提交完表單就沒事了,那擷取提交表單後怎麼知道成沒成功啊。怎麼擷取登入成功後的頁面呢。所以我在這裡講的全一點:

商務程序大體是:

1.擷取一個頁面的html代碼

2.從中找出type不是submit的<input>標籤,填寫內容

3.找到所有type是submit的<input>標籤,類比點擊提交

4.擷取提交後的頁面

那麼我的解決思路就是:

0X01:為第一次頁面載入成功添加一個事件1,為什麼要用添加事件的方式呢。因為如果不這樣,經常會擷取不到webbrowser的DocumentText或者擷取不全,導致程式很不穩定。

0X02:自動填寫表單並提交。

0X03:這是最關鍵的一步,先把之前的事件1移除,然後加上載入成功事件2,這樣的話在點擊登入跳轉後不會呼叫事件1,而會呼叫事件2,事件2中可以擷取webbrowser的DocumentText,就沒有問題了(但是需要注意,步驟0X03的代碼一定要在點擊提交按鈕之前,否則提交了再修改事件就來不及了) 

首先,不是視窗程序,需要引入using System.Windows.Forms;才能使用webbrowser控制項。之後就是代碼了:


WebBrowser wb = new WebBrowser();
wb.ScriptErrorsSuppressed = true;
wb.DocumentCompleted += wb_DocumentCompleted;//添加頁面第一次載入完成事件
 private void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)//網頁載入完後調用,但是為什麼調用多次。。。。。。。。        {            if (!e.Url.Equals(this.uri))//防止一個網址不明原因的多次調用            {                //not actually complete, do nothing                return;            }            this.htmldocument = wb.Document;            HtmlElementCollection elementcol = this.htmldocument.GetElementsByTagName("input");            wb.DocumentCompleted -= wb_DocumentCompleted;//刪除頁面載入完成事件            wb.DocumentCompleted += wb_DocumentCompleted2;//添加新的頁面載入完成事件(也就是提交成功後頁面成功載入事件)            foreach (HtmlElement ele in elementcol)            {                if (!ele.GetAttribute("type").Equals("submit"))//不是提交按鈕的都填成123                {                    ele.SetAttribute("value","123");                }                else                {                    ele.InvokeMember("click");//點擊一下                }            }        }
private void wb_DocumentCompleted2(object sender, WebBrowserDocumentCompletedEventArgs e)        {            System.Diagnostics.Debug.WriteLine(wb.DocumentText);            //throw new NotImplementedException();        }

 


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.