2013-07-06 21 views
0

我有一个简单的代码,帮我爬到谷歌结果页的第2页:错误当进行循环抓取谷歌下一个页面华廷

var ie= new IE(); 
ie.Link(Find.ByText("2")).Click(); 

我要的是爬行到更下一个页面,在输入的页面的数量,让我作出这样一个循环:

   string[] page = null; 
       for (int i = 0; i < NumOfPage; i++) 
       { 
       Array.Resize<string> (ref page, i+1); 
       page[i] = "\"" + i.ToString() + "\""; 
       } 
       int count=2; 
       while (count<NumOfPage) 
       { 
        ie.Link(Find.ByText(page[count])).Click();                     
        count++;  
       } 

但结果是它暂停在第一页,无爬行到下一个页面。看起来循环不起作用。哪里有问题???

+0

不,你还没有真正提供足够的信息。例如,当您通过代码进行调试时,会发生什么情况?什么是'NumOfPage'? (为什么你要使用数组,为什么当'for'循环会更简单时,你使用'while'循环?) –

+0

NumOfPage是我想要浏览的页面数,例如:10。 Num Of Page是在文本框中输入的。虽然或For不是一个问题的人,只要语法是正确的。我已经放弃了,页面[我] =“我”,因为我想要的。所以everthing似乎是正确的,这就是我不知道为什么它不工作的原因 – vyclarks

+1

那么你没有说什么当你在你的循环内通过时发生了什么。我还建议你将'ie.Link(Find.ByText(page [count]))。单击()'分成三步:对Find.ByText的调用,对Link的调用和调用到'点击'。这将使调试更容易。 –

回答

0

我认为你不应该使用Click()方法来进入下一个页面中,我认识到,当Link可见Click()将只执行,所以你必须垂直滚动条滚动到页面底部,显示Link第一(您可以手动滚动或以编程方式工作)。但是我认为要进入下一页,您可以调用方法GoTo(),而不是从发现的Link中获得Url。我已经测试了它,但页面切换之间的延迟有点大(大约2秒或更长)。我不知道为什么你要做到这一点,想从你知道的:

for (int i = 2; i < NumOfPage; i++) 
{ 
    ie.GoTo(ie.Link(WatiN.Core.Find.ByText(i.ToString())).Url);//Don't need quotes at all. 
} 

:)

0
 // Setup browser object 
     var browser = new IE(); 
     var url = "www.google.com"; 
     browser.GoTo(url); 

     var searchBox = browser.TextField(Find.ByName("q")); 
     searchBox.Value="Rex"; 

     //click on the search button 
     var btnSearch = browser.Button(Find.ByValue("Search")); 
     btnSearch.Click(); 
     //wait for browser to load properly 
     browser.WaitForComplete(); 

     // Find the navigation menu table    
     var navigationtable = browser.Table(Find.ById("nav")); 

     // To go to the second page 
     var secondpage = navigationtable.Link(Find.ByText("2")); 
     secondpage.Click(); 
     //wait for browser to load properly 
     browser.WaitForComplete(); 

如果要循环这只是进入到第二页 现在通过

然后

for (int i = 2; i <= 10; i++) 
{ 
var nextpage = navigationtable.Link(Find.ByText("i")); 
//check if the link exists 
/if yes then click on it 
if(nextpage.Exists) 
nextpage.click(); 
browser.waitforComplete 
}