1. 程式人生 > >webBroswer自動提交表單 webBroser過濾某些標籤元素 webBroswer擷取網頁部分內容 webBroswer 獲取 iframe裡的元素

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;                    
                    }
                }
            }