2012-07-04 29 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(); 
}