2012-07-04 1 views
0

watin.dll을 사용하여 웹 페이지를 탐색하고 li 태그의 링크를 클릭하고 다음 페이지로 이동하여 일부 데이터를 가져온 다음 이전 페이지로 돌아가서 다음 li 태그의 링크를 클릭하십시오.'WatiN'을 사용하여 브라우저의 각 li 태그를 구문 분석

li 태그에서 하나의 링크로이 작업을 수행 할 수 있습니다. 모든 li 태그를 ul <classname> 아래에 표시하려면 각 링크를 클릭하고 위의 절차를 수행하십시오. 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에 링크가 클릭되면 오류 - "function evaluation timed out"오류가 발생합니다. 이것에 관한 원인을 아십니까 – John

+0

Watin 페이지 모델을 사용하고 있습니까? 그렇다면 질의하기 전에 매번 목록 페이지를 다시 채워야 할 수도 있습니다. –

1

당신은

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

이 시도 (LINQ to XML을)를이 코드를 시도 할 수 있습니다 :

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