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");

請問版主: 如果 tbody 的style="display:none" 如何查找
可以先用GetAttribute去取style這個屬性試試看 不過可能不行,因為我之前試這種CSS的找尋似乎會 找不到(你還是可以試試看啦><") 如果不行的話,就只能直接尋找tbody這個tag了 從HTML最上面開始數下來的第幾個tag這樣找^^
不好意思可以請問一下 如果我要執行網頁裡的按鍵要怎樣達成
//找到你要按的按鈕的標籤 HtmlElement MyButton = Doc.Forms["main_form"].GetElementsByTagName("input")[3]; //按下去 MyButton.InvokeMember("click");
不好意思 如果我要用 這個按鈕 程式碼要怎麼打>< 我的webBrowser name 是 ie
HtmlDocument doc = ie.Document; HtmlElement MyButton= doc.GetElementsByTagName("input").GetElementsByName("button2")[0]; MyButton.InvokeMember("click"); 祝你順利^^"
*****
*****
您好 我想問一下 richTextContent1是甚麼東西呢 我找了好久還是找不到 不好意思我還是個新手
那個只是RichTextBox這個控制項@@ 被我命名成richTextContent1而已~>~"" 新手經過時間的考驗就會變老手唷^^
大大最近本人迷上這樣一隻程式,這事我所做的蛋是卻碰上困難不知從何解決 http://www.wretch.cc/blog/qw0972023450/7360950 上面是我部落格自動瀏覽的文章 我的即時通:a0955546029 做這個單純好玩可是卻沒想到碰到困難><~ 不知道大大可否教我?? 謝謝:) 令當她日小弟必定報答萬分 任何事故在所不惜只求大哥交交小弟我
我也只會簡單的程式而已,你會的應該比我多吧>< 所以如果有簡單的問題的話,直接在這邊問就好啦^^
嗯!!那我想請問一下網頁抓取的問題... 因為這篇文章有點看不太懂 能有+妳的即時通或msn詳細問妳呢?謝謝
不好意思~我沒有在用即時通或msn呢><" 你連遊戲外掛都會寫了還問我=.=" 我都不會寫遊戲外掛T_T""
大大從哪知道我有製做外掛0..0.... 但是我寫的算是網頁遊戲.. 只是是MMORPG類型的@@ 對囉 大大 我有新作品上市^^ 希望大大可以到我無名看看,並給我個意見....看哪裡需要改進的
哈哈~我會去看看的^^
您好,想請問你唷,我再利用web1在google map 搜尋地址,想利用HtmlElement抓取地址回傳到我的label,不知道要怎麼利用HtmlElement呢??
這說來話長,交給你去研究摟,簡單來說就是先到到GoogleMap中地址的欄位的Html標籤,再把它抓下來摟
你好,我想請問版主要如何用C#寫出直接可以從HTML擷取資料的程式碼 我已經困擾一陣子了,麻煩幫我解答,謝謝
最簡單的就是用字串解析摟
請問有方式可以與您聯絡嗎?? mail or skype or msn 想請教大大問題 謝謝
老大 請問像這網址內第一個 內嵌入的 flash 要怎麼抓他的ID呢 http://soulairport.blogspot.tw/ 看原始碼只有javascript 我想要抓出這個廣告然後讓程式自動點選 感恩
版主好, 我想請問一下,WebBrowser可不可用在Windows Azure中呢?如果可以,請問如何解決,我的項目是Worker Role. 謝謝!
版主你好 我想請問一下 如果我要用WebBrowser 登入一個網站 用C# winfrom 然後WebBrowser自動關閉 而winform可以載入這個網站的資訊跟資料可以在這個網頁上操作 這該怎麼做?
要抓tag裡面的class值,可以用GetAttribute("className")