2013-07-06 36 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 
}