webBrowser,控制頁面、提交表單的兩種方法
一、第一種方法貌似網上很少有人提。。。。就是使用javascript去控制頁面。
熟悉javascript的人知道,它主要是用來控制客戶端瀏覽器上行為動作的語言。
用瀏覽器隨便開啟一個頁面,在位址列輸入: javascript:alert("a");void(0); 確認,就會彈出警告框。也就是說,可以通過在位址列輸入js程式碼,控制頁面中內容。
比如要添表單,可以 javascript:document.getElementById("username").value="http://blogbeta.blueidea.com/warran";document.getElementById("password").value="123456";void(0);
那麼,使用webBrowser,通過js去控制頁面,提交表單。
webBrowser1.Navigate("javascript:document.getElementById(/"username/").value="http://blogbeta.blueidea.com//"warran/";document.getElementById(/"password/").value=/"123456/";void(0);");
如果還要提交表單,可以加上document.form1.submit();" 就可以了。
不過用這個方法,要注意兩點:
1、在一次執行中,不能多次使用。
比如
private void button1_Click(object sender, EventArgs e)
{
webBrowser1.Navigate("javascript:document.getElementById("username").value="http://blogbeta.blueidea.com/warran";void(0);");
webBrowser1.Navigate("javascript:document.getElementById("password").value="123456";void(0);");
}
這樣,就會出問題。結果是沒反映。。。。但改成如下,就可以,但基本上,這樣不適合實際應用。
private void button1_Click(object sender, EventArgs e)
{
webBrowser1.Navigate("javascript:document.getElementById("username").value="warran";void(0);");
messageBox.Show("aaa");
webBrowser1.Navigate("javascript:document.getElementById("password").value="123456";void(0);");
}
就是說彈個警告框,就可正常運行了。大致意思就是讓主視窗重新啟用一下,才行。。。
2、Navigate中的js程式碼不能過長,不然仍然會不執行。。。。
二、第二種方法。也是推薦使用的方法,使用ihtmldocument2的類去控制。
1、新增引用。
在COM中,選擇Microsoft.mshtml
2、使用名稱空間。
using mshtml;
3、具體程式碼。
IHTMLDocument2 doc = (IHTMLDocument2)this.webBrowser1.Document.DomDocument;
mshtml.HTMLInputTextElement text1;
text1 = (HTMLInputTextElement)doc.all.item("username", 0);
((mshtml.HTMLInputElement)(text1)).value = "warran";
//這裡注意,因為是input輸入框,所以要定義HTMLInputTextElement類
text1 = (HTMLInputTextElement)doc.all.item("password", 0);
((mshtml.HTMLInputElement)(text1)).value = "123456";
mshtml.HTMLFormElement f1 = (mshtml.HTMLFormElement)doc.all.item("form1", 0);
((HTMLFormElement)(f1)).submit();
//因為是form表單,所以要定義HTMLFormElement類