2016-07-10 85 views
0

我試圖點擊類內的鏈接。無法搜索標籤,ID或類似的東西,因爲程序正在刷新頁面,直到有可用的票證。C#webBrowser獲取類中的元素

的HTML代碼如下所示:

<div class="items available"> 
    <div class="item"> 
     <a href="link.com"> 
    </div> 
    //more item classes 
<div class="items sold"> 
    <div class="item"> 
     <a href="link.com"> 
    </div> 
    //more item classes 

我認爲我需要「可用的項目」中的內容,經過項目的內容,並有我需要點擊一個元素(有隻有一個元素)。但我怎麼能做到這一點?

這是我認爲它需要做的。

foreach (HtmlElement el in webBrowser1.Document.GetElementsByTagName("div")) 
{ 
    if (el.GetAttribute("className") == "items available") 
    { 
     foreach (HtmlElement el2 in //get all elements within items available) 
     { 
      if (el2.GetAttribute("className") == "item") 
      //i think it will get the first item class within items available  
      { 
       foreach (HtmlElement el3 in //get all a elements within item) 
       { 
        el3.InvokeMember("click"); 
        break; 
       } 

      } 
     } 
    } 
} 

但這甚至可能嗎?但願如此!!

謝謝!

+0

「門票可用」?你的意思是「物品可用」嗎? – derloopkat

+0

哎呀,我的意思是「可用物品」。我會改變那個哈哈。謝謝! – Teun

+0

問題是,當您嘗試從文檔中獲取div時,它們尚未加載,因爲該過程是異步的。我的建議是在c#中執行一個web請求,以獲取頁面並使用HtmlAgilityPack從html中提取元素。 – derloopkat

回答

0

您可以使用HtmlAgilityPack,這是從頁面提取元素的推薦方式。

使用Nuget安裝HtmlAgilityPack。以下是可能是您的起點的示例。

HtmlDocument _doc = web.Load(url); 
var myClasses = _doc.DocumentNode.Descendants("div").Where(d => 
    d.Attributes.Contains("items available") 
); 

然後你可以循環myClasses集合。

+0

謝謝!這個對我有用! – Teun