webBroswer自動提交表單 webBroser過濾某些標籤元素 webBroswer擷取網頁部分內容 webBroswer 獲取 iframe裡的元素
一、webBroswer自動提交表單(以百度賬號登陸為例)
1、新建一個winform專案
2、在winform拖入一個webBroswer控制元件
3、雙擊webBroswer控制元件,寫入程式碼
namespace AutoSummit
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
webBrowser1.Navigate("https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F");
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
HtmlElement textSubmit = webBrowser1.Document.All["TANGRAM__3__userName"];
HtmlElement textpswd = webBrowser1.Document.All["TANGRAM__3__password"];
HtmlElement btnSubmit = webBrowser1.Document.All["TANGRAM__3__submit"];
if (textSubmit == null || textpswd == null || btnSubmit == null)
return;
textSubmit.SetAttribute("value","XXXX"); // XXXX為百度賬號
textpswd.SetAttribute("value", "XXXX"); //XXXX 為密碼
btnSubmit.InvokeMember("click");
}
}
}
二、webBroswer過濾某些元素顯示其為不可見,webBroswer擷取網頁部分內容 (如將id為btnBack的按鈕元素過濾掉讓他不可見)
private void displayNonebtnBack()
{
HtmlElement back = webBrowser1.Document.All["btnBack"];
if (back == null)
{
return;
}
back.Style = "display:none";
}
PS:我在網上經常看到有同學說想讓webBroswer只顯示網頁一部分的內容,或者webBroswer擷取網頁部分內容,就是過濾掉一些內容,網上很多的說法都是將整個網頁的原始碼下載下來,然後再將需要的標籤原始碼寫到webBroswer裡去,但是這個做法有一個不好的地方就是javascript的內容不好處理,所以這個display:none的方法是我覺得一個比較好的方法,整個網頁的原始碼也不需要下載,只需要在將過濾掉的標籤不顯示,displayNone這個函式寫在webBrowser1_DocumentCompleted()這個函式裡,這樣頁面載入的時候便可以自動將不需要顯示的內容過濾掉,即實現webBroswer擷取網頁部分內容的功能。
三、webBroswer 獲取 iframe裡的元素
HtmlElement BTNNext = webBrowser1.Document.Window.Frames["frame_main"].Document.All["BTNNext"]; //frame_main為iframe的id或者name
四、webBroswer 將iframe裡div 標籤的元素設定為不可見
foreach (HtmlElement he in webBrowser1.Document.Window.Frames["frame_main"].Document.GetElementsByTagName("div"))
{
if (he.GetAttribute("className") == "Pay-TypeTab")
{
he.Style = "display:none";
}
if (he.GetAttribute("className") == "ttlbox")
{
he.Style = "display:none";
}
}
foreach (HtmlElement he in webBrowser1.Document.Window.Frames["frame_main"].Document.GetElementsByTagName("a"))
{
if (he.GetAttribute("tabIndex").StartsWith("-1"))
{
he.Style = "display:none";
}
}
webBroswer 獲取div 標籤子標籤
foreach (HtmlElement getMoible in webBrowser1.Document.GetElementsByTagName("div"))
{
if (getMoible.GetAttribute("className") == "getMoible")
{
foreach (HtmlElement he in getMoible.Children)
{
he.InvokeMember("click");
}
}
}
webBroswer 獲取div 標籤的子標籤span 裡的文字內容,如要獲取 “我是沒有id的標籤1”這個文字
如:有<div class="getMoible" >
<span>
我是沒有id的標籤1
</span>
</div>
<div class="getMoible2" >
<span>
我是沒有id的標籤2
</span>
</div>
沒有id 的div 和span,可以這樣獲取文字內容
foreach (HtmlElement getMoible in webBrowser1.Document.GetElementsByTagName("div"))
{
if (getMoible.GetAttribute("className") == "getMoible")
{
textBox1.Visible = false;
foreach (HtmlElement he in getMoible.Children)
{
label1.Text = he.InnerText;
}
}
}