2015-01-07 69 views
0

我已經做了一個WinForms應用程序,它會從我的網站上的表格中獲得一個名稱列表。我目前正在使用一個WebBrowser和一個計時器。我認爲這可以做得更順暢,更快。 WebBrowser運行緩慢(舊的Internet Explorer是內置的),它有時無法獲取數據,我必須再次運行計時器。如何從網站上的表格檢索數據?

所以我有一個ListBox(它應該包含名稱)。 ListBox被稱爲PlayerList。 然後我有一個按鈕,它激活定時器來獲取數據。這是我的計時器代碼。

private void UpdatePlayers_Tick(object sender, EventArgs e) 
     { 
      PlayerList.Items.Clear(); 
      if (this.Tibia.ReadyState == WebBrowserReadyState.Complete) 
      { 
       foreach (HtmlElement cell in this.Tibia.Document.GetElementsByTagName("tr")) 
       { 
        string cls = cell.GetAttribute("className"); 
        if (cls.StartsWith("Odd")) 
        { 
         dynamic oldname = cell.InnerText; 
         string[] strings = oldname.Split('0', '1', '2', '3', '4', '5', '6', '7', '8', '9'); 
         string charnameonly = strings[0]; 
         this.PlayerList.Items.Add(charnameonly); 
        } 
        else if (cls.StartsWith("Even")) 
        { 
         dynamic oldname = cell.InnerText; 
         string[] strings = oldname.Split('0', '1', '2', '3', '4', '5', '6', '7', '8', '9'); 
         string charnameonly = strings[0]; 
         this.PlayerList.Items.Add(charnameonly); 
        } 
       } 
      } 
     } 

我不知道是否有人可以幫助我實現這一點,沒有WebBrowser或類似的東西。一些代碼示例會非常好。

注:我只想要玩家的名字。下面是該網站從我得到的數據:http://www.tibia.com/community/?subtopic=worlds&world=Antica

回答

3

您可以使用HtmlAgilityPack

var players = await GetPlayers(); 

async Task<List<List<string>>> GetPlayers() 
{ 
    string url = "http://www.tibia.com/community/?subtopic=worlds&world=Antica"; 
    using (var client = new HttpClient()) 
    { 
     var html = await client.GetStringAsync(url); 
     var doc = new HtmlAgilityPack.HtmlDocument(); 
     doc.LoadHtml(html); 

     var table = doc.DocumentNode.SelectSingleNode("//table[@class='Table2']"); 
     return table.Descendants("tr") 
        .Skip(2) 
        .Select(tr => tr.Descendants("td") 
            .Select(td => WebUtility.HtmlDecode(td.InnerText)) 
            .ToList()) 
        .ToList(); 
    } 
} 
0

使用Selenium。它主要設計用於測試, 甚至更​​好的報廢數據。 從經驗說起。