错误进行循环抓取谷歌下一页Watin
本文关键字:一页 Watin 谷歌 抓取 循环 错误 | 更新日期: 2023-09-27 18:21:30
我有一个简单的代码可以帮助我爬到谷歌结果页面的第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++;
}
但结果是它在第一页暂停,没有爬到下一页。这个循环似乎不起作用。问题出在哪里???
我认为你不应该使用Click()
方法来转到下一页,我知道只有当Link
可见时才会执行Click()
,所以你必须将垂直滚动条滚动到底部才能首先显示Link
(手动或编程滚动可以根据你的需要)。然而,我认为要转到下一页,您可以使用从找到的Link
中获得的Url
来调用方法GoTo()
。我已经测试过了,但页面切换之间的延迟有点大(大约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.
}
:)
// 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
}