WebBrowserのNavigateメソッドは非同期で動くので、コールしたあとすぐにはページが読み込まれておらず解析できない。そこでReadyStateがCompleteになるまで待てば解析できる。まつにはDoEventを使う。
タグの数を数えるプログラム(C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
private void button1_Click(object sender, EventArgs e) { webBrowser1.Navigate(@"http://ambiesoft.com/blog/archives/1603"); while (webBrowser1.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); } HtmlDocument doc = webBrowser1.Document; System.Collections.Generic.Dictionary<string, int> tagcounter = new Dictionary<string, int>(); foreach(HtmlElement elm in doc.All) { int val; if (!tagcounter.TryGetValue(elm.TagName, out val)) val = 0; tagcounter[elm.TagName] = val + 1; } StringBuilder sb = new StringBuilder(); foreach(KeyValuePair<string,int> kv in tagcounter) { sb.Append(kv.Key); sb.Append(" : "); sb.Append(kv.Value); sb.AppendLine(); } MessageBox.Show(sb.ToString()); } |