2012-07-04 43 views
0

我正在使用watin dll瀏覽網頁,單擊li標記中的鏈接,轉到下一頁,獲取一些數據,返回到上一頁並返回點擊下一個li標籤中的鏈接。使用'WatiN'解析瀏覽器中的每個li標記

我可以用li標籤中的一個鏈接做到這一點。我想要在ul <classname>的所有li標籤上點擊每個鏈接並執行上述步驟。我如何獲得所有li並循環瀏覽每個頁面?頁面

HTML代碼是這樣的:

<ul id="ul_classname" class="search-result-set"> 
    <li class=""> 
     <div class="Div_Classname"> 
      <h3 class="standard_font"> 
       <a class="a class_name" href="link to be clicked">text to be displayed</a> 
      </h3> 
      <p class="word-wrap"></p> 
     </div> 
    </li> 
    <li class=""> 
     <div class="Div_Classname"> 
      <h3 class="standard_font"> 
       <a class="a class_name" href="link to be clicked">text to be displayed</a> 
      </h3> 
      <p class="word-wrap"></p> 
     </div> 
    </li> 
</ul> 

回答

1

HTH!

private void CrawlSite() 
{ 
    int idx = 0; 
    do 
    { 
     idx = this.ClickLink(idx); 
    } 
    while (idx != -1); 
} 

private int ClickLink(int idx) 
{ 
    WatiN.Core.Browser browser = GetBrowser(); 

    ListItemCollection listItems = browser.List("ul_classname").ListItems; 
    if (idx > listItems.Count - 1) 
     return -1; 

    Link lnk = listItems[idx].Link(Find.ByClass("a class_name")); 
    lnk.Click(); 

    //TODO: get your data 

    browser.Back(); 

    return idx + 1; 
} 
+0

它的工作正常,如果我每次打開新的瀏覽器。如果我使用相同的瀏覽器,當鏈接被點擊時,它會給我提供錯誤。錯誤 - 「class_name的函數評估超時」。你知道這是什麼原因嗎 – John

+0

你在使用watin頁面模型嗎?如果是這樣,您可能需要重新抓取您的列表頁面,然後再進行詢問。 –

1

你可以用這個代碼嘗試(LINQ到XML)

var xdoc = XDocument.Load(yourFile); 

var terms= from term in xdoc.Descendants("ul") 
     select new 
     { 
       Class= term.Attribute("class").Value 
     }; 

foreach(var li in terms) 
{ 
    Console.Write(li.Class); 
} 
1

試試這個:

LinkCollection links = ie.Links; 
foreach (var link in links) 
{ 
    link.Click(); 
    // Do something 
    ie.Back(); 
}