WebBrowser是Visual Studio裡面的一個控制項

首先先把它拉到Form上吧

設定一下loading這個全域變數為true

bool loading = true;

寫程式在一個按鈕的事件裡

private void btn_Go_Click(object sender, EventArgs e)
{

              for (int I = 0; I <= 25; I++)
            {
                 loading = true;

                 //假設Google有http://www.google.com?Hello=A,http://www.google.com?Hello=B,http://www.google.com?Hello=C....等26個網頁

                 //就用迴圈去跑,當網頁讀進來完成之後,便會觸發到下面的Navigated事件

                 //(DocumentCompleted事件的話常常會有問題,因為如果網頁下載不完全就會當在那邊)
                 webBrowser1.Navigate("http://www.google.com?Hello="+ Convert.ToChar(65 + I));

                //跑到這因為loading還是true的關係,會一直跑下面這個迴圈

                //而Application.DoEvents();是讓程式在跑迴圈時還能去傾聽其他的事件
                while (loading)
                {
                    Application.DoEvents();
                }

            }

}

 

 private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{

      //放個計時器,等待一下網頁下載回來
      Webtimer.Start();
}

 

//等待完後就開始擷取網頁資料

private void Webtimer_Tick_1(object sender, EventArgs e)
{
            Webtimer.Stop();

 

            //這邊使用的是一種叫做DOM的技術,DOM是Document Object Model          
            HtmlDocument doc = webBrowser1.Document;

            for (int i = 0; i < doc.All.Count; i++)
            {                  

                                 //去抓標籤名字有a的,像是連結<a href=xx>這種

                                 //奇怪的是這個方法如果要抓一些標籤都抓不到,像是<td><tr>那些=.=

                                 //所以那些我是用另外的方法抓的,等下會講
                if (doc.All[i].TagName.ToLower().Equals("a"))
                {             

                                       //GetAttribute就是去取得標籤的屬性的內容,例:

                                      //<a href ="我是屬性的內容" target=_blank>,不過有些屬性取不到,像是class

                    if (doc.All[i].GetAttribute("href").Contains("abc"))
                    {                             //InnerText就是取得標籤中間的內容,<標籤>內容</標籤>
                        richTextContent1.AppendText(doc.All[i].InnerText);
                        richTextContent1.AppendText(doc.All[i].GetAttribute("href"));
                        richTextContent1.AppendText(Environment.NewLine);

                      //另外這個函式可以去更改HTML裡面屬性的內容
              XXX.SetAttribute("value","Hello");

                    }
                }
           }

            loading = false;
}

 

另外還有些用法

 HtmlDocument doc2 = webBrowser2.Document;

//搜尋整個Body標籤內的內容是否有"我在這"這個文字字串

doc2.Body.InnerHtml.Contains("我在這")

 

//整個文件的Img標籤有幾個

doc2.Images.Count

 

//先搜尋標籤名字為tbody的標籤,然後後面的[4]代表著拿整個HTML的第四個tbody

HtmlElement tbody = doc2.GetElementsByTagName("tbody")[4];

 

//拿上面第4個tbody裡面的第6個tr標籤

HtmlElement tr = tbody.GetElementsByTagName("tr")[6];

 

//這是webbrowser1的"事件",當跳出新視窗時要做什麼

private void webBrowser1_NewWindow(object sender, CancelEventArgs e)

{
           //這行就是讓多跳出的新視窗跳不出來 =.="

           e.Cancel = true;
}

//讀Frames用法

HtmlWindow currentWindow = WebBrowser1.Document.Window;

HtmlWindow frame = currentWindow.Frames["Frame1"];
foreach (HtmlWindow frame in currentWindow.Frames)
{
     

}

 

//找到某一個按鈕的標籤,並且按下去

HtmlElement MyButton = Doc.Forms["main_form"].GetElementsByTagName("input")[3];

 

MyButton.InvokeMember("click");

 

 

 

 

 

 

 

welkingunther 發表在 痞客邦 PIXNET 留言(14) 人氣()


留言列表 (14)

發表留言
  • 追風
  • 請問版主:
    如果 tbody 的style="display:none"
    如何查找
  • 可以先用GetAttribute去取style這個屬性試試看
    不過可能不行,因為我之前試這種CSS的找尋似乎會
    找不到(你還是可以試試看啦><")

    如果不行的話,就只能直接尋找tbody這個tag了
    從HTML最上面開始數下來的第幾個tag這樣找^^

    welkingunther 於 2009/12/14 00:58 回覆

  • bill
  • 不好意思可以請問一下
    如果我要執行網頁裡的按鍵要怎樣達成
  • //找到你要按的按鈕的標籤

    HtmlElement MyButton = Doc.Forms["main_form"].GetElementsByTagName("input")[3];

    //按下去
    MyButton.InvokeMember("click");

    welkingunther 於 2010/03/29 15:30 回覆

  • bill
  • 不好意思 如果我要用 <input name="button2" type="button" value="汽車路徑" onclick="javascript:route();" />這個按鈕 程式碼要怎麼打><
    我的webBrowser name 是 ie
  • HtmlDocument doc = ie.Document;

    HtmlElement MyButton=
    doc.GetElementsByTagName("input").GetElementsByName("button2")[0];

    MyButton.InvokeMember("click");

    祝你順利^^"

    welkingunther 於 2010/03/31 18:46 回覆

  • 悄悄話
  • Gary
  • 您好 我想問一下
    richTextContent1是甚麼東西呢
    我找了好久還是找不到
    不好意思我還是個新手
  • 那個只是RichTextBox這個控制項@@
    被我命名成richTextContent1而已~>~""
    新手經過時間的考驗就會變老手唷^^

    welkingunther 於 2010/07/15 21:32 回覆

  • 阿肥
  • 大大最近本人迷上這樣一隻程式,這事我所做的蛋是卻碰上困難不知從何解決
    http://www.wretch.cc/blog/qw0972023450/7360950
    上面是我部落格自動瀏覽的文章
    我的即時通:a0955546029

    做這個單純好玩可是卻沒想到碰到困難><~
    不知道大大可否教我??
    謝謝:)
    令當她日小弟必定報答萬分
    任何事故在所不惜只求大哥交交小弟我
  • 我也只會簡單的程式而已,你會的應該比我多吧><
    所以如果有簡單的問題的話,直接在這邊問就好啦^^

    welkingunther 於 2010/08/06 22:57 回覆

  • 阿肥
  • 嗯!!那我想請問一下網頁抓取的問題...
    因為這篇文章有點看不太懂
    能有+妳的即時通或msn詳細問妳呢?謝謝
  • 不好意思~我沒有在用即時通或msn呢><"
    你連遊戲外掛都會寫了還問我=.="
    我都不會寫遊戲外掛T_T""

    welkingunther 於 2010/08/07 21:13 回覆

  • 阿肥
  • 大大從哪知道我有製做外掛0..0....

    但是我寫的算是網頁遊戲..
    只是是MMORPG類型的@@

    對囉 大大 我有新作品上市^^
    希望大大可以到我無名看看,並給我個意見....看哪裡需要改進的
  • 哈哈~我會去看看的^^

    welkingunther 於 2010/08/09 21:59 回覆

  • 星
  • 您好,想請問你唷,我再利用web1在google map 搜尋地址,想利用HtmlElement抓取地址回傳到我的label,不知道要怎麼利用HtmlElement呢??
  • 這說來話長,交給你去研究摟,簡單來說就是先到到GoogleMap中地址的欄位的Html標籤,再把它抓下來摟

    welkingunther 於 2011/12/16 20:02 回覆

  • 畢專大學生
  • 你好,我想請問版主要如何用C#寫出直接可以從HTML擷取資料的程式碼
    我已經困擾一陣子了,麻煩幫我解答,謝謝
  • 最簡單的就是用字串解析摟

    welkingunther 於 2012/04/29 11:43 回覆

  • pigpigman
  • 請問有方式可以與您聯絡嗎??
    mail or skype or msn
    想請教大大問題 謝謝
  • 訪客
  • 老大
    請問像這網址內第一個 內嵌入的 flash 要怎麼抓他的ID呢
    http://soulairport.blogspot.tw/

    看原始碼只有javascript
    我想要抓出這個廣告然後讓程式自動點選
    感恩
  • dykj
  • 版主好,
    我想請問一下,WebBrowser可不可用在Windows Azure中呢?如果可以,請問如何解決,我的項目是Worker Role.
    謝謝!
  • 楊廷曜
  • 版主你好 我想請問一下 如果我要用WebBrowser 登入一個網站 用C# winfrom
    然後WebBrowser自動關閉 而winform可以載入這個網站的資訊跟資料可以在這個網頁上操作 這該怎麼做?