C#WebBrowser控件使用教程與技巧收集--蘇飛收集
先來看看經常使用的方法
javascript
[C#] 純文本查看 複製代碼html
?java
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
Navigate(
string
urlString):瀏覽urlString表示的網址
Navigate(System.Uri url):瀏覽url表示的網址
Navigate(
string
urlString,
string
targetFrameName,
byte
[] postData,
string
additionalHeaders): 瀏覽urlString表示的網址,併發送postData中的消息
//(一般咱們登陸一個網站的時候就會把用戶名和密碼做爲postData發送出去)
GoBack():後退
GoForward():前進
Refresh():刷新
Stop():中止
GoHome():瀏覽主頁
WebBrowser控件的經常使用屬性:
Document:獲取當前正在瀏覽的文檔
DocumentTitle:獲取當前正在瀏覽的網頁標題
StatusText:獲取當前狀態欄的文本
Url:獲取當前正在瀏覽的網址的Uri
ReadyState:獲取瀏覽的狀態
WebBrowser控件的經常使用事件:
DocumentTitleChanged,
CanGoBackChanged,
CanGoForwardChanged,
DocumentTitleChanged,
ProgressChanged,
ProgressChanged
DocumentCompleted 頁面加載完成以後的事件
複製代碼
|
一、獲取非input控件的值:
web
[C#] 純文本查看 複製代碼數組
?cookie
01
02
03
|
webBrowser1.Document.All[
"控件ID"
].InnerText;
或webBrowser1.Document.GetElementById(
"控件ID"
).InnerText;
或webBrowser1.Document.GetElementById(
"控件ID"
).GetAttribute(
"value"
);
|
2.獲取input控件的值:
併發
[C#] 純文本查看 複製代碼框架
01
02
|
webBrowser1.Document.All[
"控件ID"
].GetAttribute(
"value"
);;
或webBrowser1.Document.GetElementById(
"控件ID"
).GetAttribute(
"value"
);
|
三、給輸入框賦值:
函數
[C#] 純文本查看 複製代碼post
01
02
03
04
|
//輸入框
user.InnerText =
"myname"
;
password.InnerText =
"123456"
;
webBrowser1.Document.GetElementById(
"password"
).SetAttribute(
"value"
,
"Welcome123"
);
|
四、下拉、複選、多選:
[C#] 純文本查看 複製代碼
01
02
03
04
05
06
|
//下拉框:
secret.SetAttribute(
"value"
,
"question1"
);
//複選框
rememberme.SetAttribute(
"Checked"
,
"True"
);
//多選框
cookietime.SetAttribute(
"checked"
,
"checked"
);
|
五、根據已知有ID的元素操做沒有ID的元素:
[C#] 純文本查看 複製代碼
01
|
HtmlElement btnDelete = webBrowser1.Document.GetElementById(passengerId).Parent.Parent.Parent.Parent.FirstChild.FirstChild.Children[1].FirstChild.FirstChild;
|
根據Parent,FirstChild,Children[1]數組,多少層級的元素都能找到。
六、獲取Div或其餘元素的樣式:
[C#] 純文本查看 複製代碼
01
|
webBrowser1.Document.GetElementById(
"addDiv"
).Style;
|
七、直接執行頁面中的腳本函數,帶動態參數或不帶參數都行:
[C#] 純文本查看 複製代碼
01
02
03
04
|
Object[] objArray =
new
Object[1];
objArray[0] = (Object)
this
.labFlightNumber.Text;
webBrowser1.Document.InvokeScript(
"ticketbook"
, objArray);
webBrowser1.Document.InvokeScript(
"return false"
);
|
八、自動點擊、自動提交:
[C#] 純文本查看 複製代碼
01
02
|
HtmlElement btnAdd = doc.GetElementById(
"addDiv"
).FirstChild;
btnAdd.InvokeMember(
"Click"
);
|
九、自動賦值,而後點擊提交按鈕的時候若是出現腳本錯誤或一直加載的問題,通常都是點擊事件執行過快,這時須要藉助Timer控件延遲執行提交按鈕事件:
[C#] 純文本查看 複製代碼
01
02
03
04
05
06
07
|
this
.timer1.Enabled =
true
;
this
.timer1.Interval = 1000 * 2;
private
void
timer1_Tick(
object
sender, EventArgs e)
{
this
.timer1.Enabled =
false
;
ClickBtn.InvokeMember(
"Click"
);
//執行按扭操做
}
|
十、屏蔽腳本錯誤:
[C#] 純文本查看 複製代碼
01
|
將WebBrowser控件ScriptErrorsSuppressed設置爲True便可
|
十一、自動點擊彈出提示框:
[C#] 純文本查看 複製代碼
01
02
03
04
05
06
07
|
private
void
webBrowser1_Navigated(
object
sender, WebBrowserNavigatedEventArgs e)
{
//自動點擊彈出確認或彈出提示
IHTMLDocument2 vDocument = (IHTMLDocument2)webBrowser1.Document.DomDocument;
vDocument.parentWindow.execScript(
"function confirm(str){return true;} "
,
"javascript"
);
//彈出確認
vDocument.parentWindow.execScript(
"function alert(str){return true;} "
,
"javaScript"
);
//彈出提示
}
|
12.WebBrowser頁面加載完畢以後,在頁面中進行一些自動化操做的時候彈出框的自動點擊(屏蔽)
[C#] 純文本查看 複製代碼
01
02
03
04
05
06
07
08
|
private
void
webBrowser1_DocumentCompleted(
object
sender, WebBrowserDocumentCompletedEventArgs e)
{
//自動點擊彈出確認或彈出提示
IHTMLDocument2 vDocument = (IHTMLDocument2)webBrowser1.Document.DomDocument;
vDocument.parentWindow.execScript(
"function confirm(str){return true;} "
,
"javascript"
);
//彈出確認
vDocument.parentWindow.execScript(
"function alert(str){return true;} "
,
"javaScript"
);
//彈出提示
//下面是你的執行操做代碼
}
|
1三、獲取網頁中的Iframe,並設置Iframe的src
[C#] 純文本查看 複製代碼
01
02
03
04
|
HtmlDocument docFrame = webBrowser1.Document.Window.Frames[
"mainFrame"
].Document;
或
HtmlDocument docFrame = webBrowser1.Document.All.Frames[
"mainFrame"
].Document;
docFrame.All[
"mainFrame"
].SetAttribute(
"src"
,
"http://www.sufeinet.com/"
);
|
網頁中存在Iframe的時候webBrowser1.Url和webBrowser1_DocumentCompleted中的e.Url不同,前者是主框架的Url,後者是當前活動框口的Url。
1四、讓控件聚焦
[C#] 純文本查看 複製代碼
01
02
03
|
this
.webBrowser1.Select();
this
.webBrowser1.Focus();
doc.All[
"TPL_password_1"
].Focus();
|
1五、打開本地網頁文件
[C#] 純文本查看 複製代碼
01
|
webBrowser1.Navigate(Application.StartupPath +
@"\Test.html"
);
|
1六、獲取元素、表單
[C#] 純文本查看 複製代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
//根據Name獲取元素
public
HtmlElement GetElement_Name(WebBrowser wb,
string
Name)
{
HtmlElement e = wb.Document.All[Name];
return
e;
}
//根據Id獲取元素
public
HtmlElement GetElement_Id(WebBrowser wb,
string
id)
{
HtmlElement e = wb.Document.GetElementById(id);
return
e;
}
//根據Index獲取元素
public
HtmlElement GetElement_Index(WebBrowser wb,
int
index)
{
HtmlElement e = wb.Document.All[index];
return
e;
}
//獲取form表單名name,返回表單
public
HtmlElement GetElement_Form(WebBrowser wb,
string
form_name)
{
HtmlElement e = wb.Document.Forms[form_name];
return
e;
}
//設置元素value屬性的值
public
void
Write_value(HtmlElement e,
string
value)
{
e.SetAttribute(
"value"
, value);
}
//執行元素的方法,如:click,submit(需Form表單名)等
public
void
Btn_click(HtmlElement e,
string
s)
{
e.InvokeMember(s);
}
|
17。獲取Cookie
[C#] 純文本查看 複製代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
[DllImport(
"wininet.dll"
, CharSet = CharSet.Auto, SetLastError =
true
)]
static
extern
bool
InternetGetCookieEx(
string
pchUrl,
string
pchCookieName, StringBuilder pchCookieData,
ref
System.UInt32 pcchCookieData,
int
dwFlags, IntPtr lpReserved);
private
static
string
GetCookieString(
string
url)
{
uint
datasize = 1024;
StringBuilder cookieData =
new
StringBuilder((
int
)datasize);
if
(!InternetGetCookieEx(url,
null
, cookieData,
ref
datasize, 0x2000, IntPtr.Zero))
{
if
(datasize < 0)
return
null
;
cookieData =
new
StringBuilder((
int
)datasize);
if
(!InternetGetCookieEx(url,
null
, cookieData,
ref
datasize, 0x00002000, IntPtr.Zero))
return
null
;
}
return
cookieData.ToString();
}
private
void
webBrowser1_DocumentCompleted_1(
object
sender, WebBrowserDocumentCompletedEventArgs e)
{
richTextBox1.Text =
string
.Empty;
if
(cbcookie.Checked)
{
if
(checkBox1.Checked)
{
richTextBox1.Text = GetCookieString(textBox1.Text.Trim());
}
else
{
richTextBox1.Text = webBrowser1.Document.Cookie;
}
}
}
|
18.怎麼設置代理
http://www.sufeinet.com/thread-2242-1-1.html
19.怎麼在加載完成某個頁面以後執行代碼
[C#] 純文本查看 複製代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
|
//本事件是當每次加載完成當前頁面後纔會執行的
private
void
webBrowser1_DocumentCompleted(
object
sender, WebBrowserDocumentCompletedEventArgs e)
{
//e.Url是當前加載的頁面,
if
(e.Url.ToString().Contains(
"http://sufeinet.com"
))
{
//執行操做1
}
else
if
(e.Url.ToString().Contains(
"http://baidu.com"
))
{
//執行操做2
}
}
|
20.怎麼禁止在新窗口中打開網頁
[C#] 純文本查看 複製代碼
01
02
03
04
05
06
07
|
private
void
webBrowser1_NewWindow(
object
sender, CancelEventArgs e)
{
string
url = ((System.Windows.Forms.WebBrowser)sender).StatusText;
webBrowser1.Navigate(url);
e.Cancel =
true
;
}
|
21.怎麼設置Cookie
[C#] 純文本查看 複製代碼
01
|
webBrowser1.Document.Cookie=「你的Cookie值」;
|