先前的示例讲过了如何自动在百度搜索并提取结果. 现在基于上次的脚本添加翻页的功能:

上次的脚本:

public void Run()
{
    Default.Navigate("http://www.baidu.com");
    Default.Ready();
    Default.SelectSingleNode("#kw").Attr("value", "hello world!");
    Default.SelectSingleNode("#su").Click();
    Default.Reset();
    Default.Ready();
    var titles = Default.SelectNodes("h3.t");
    foreach(var t in titles)
    {
        Logger.Log(t.Text());
    }
}

首先在页面选定"下一页"元素:

示例 - 如何翻页

利用JQuery有多种方法获取这个节点:

Default.SelectSingleNode("#page a:last");

 

或者

Default.SelectSingleNode("a:contains(\"下一页\")");

 

个人觉得第二种方式最可靠, 因为到最后一页时:last是能够匹配到节点的, 而contains("下一页")是匹配不到的, 因此更加能够反映正确情况. 

现在来改写原有逻辑:

var titles = Default.SelectNodes("h3.t");
foreach(var t in titles)
{
    Logger.Log(t.Text());
}

 

改为一个不停翻页的循环处理:

while(Default.Available)
{
    var titles = Default.SelectNodes("h3.t");
    foreach(var t in titles)
    {
        Logger.Log(t.Text());
    }
    var next = Default.SelectSingleNode("a:contains(\"下一页\")");
    if(next.IsEmpty()) return; //如果没有下一页就退出
    next.Click();
    Default.Reset();
    Default.Ready();
}

 

运行起来测试一下... 等... ok, 成功了, 从第一页开始一直翻到最后一页了, 所有搜索结果都正确提取出来了:

示例 - 如何翻页

下面是完整的代码:

public void Run()
{
    Default.Navigate("http://www.baidu.com");
    Default.Ready();
    Default.SelectSingleNode("#kw").Attr("value", "hello world!");
    Default.SelectSingleNode("#su").Click();
    Default.Reset();
    Default.Ready();
    while(Default.Available)
    {
        var titles = Default.SelectNodes("h3.t");
        foreach(var t in titles)
        {
            Logger.Log(t.Text());
        }
        var next = Default.SelectSingleNode("a:contains(\"下一页\")");
        if(next.IsEmpty()) return; //如果没有下一页就退出
        next.Click();
        Default.Reset();
        Default.Ready();
    }
}

 

 

 

 

相关文章:

  • 2021-11-04
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-24
  • 2022-12-23
  • 2021-10-29
  • 2022-02-18
猜你喜欢
  • 2022-12-23
  • 2021-07-21
  • 2022-12-23
  • 2021-08-08
  • 2021-11-10
  • 2022-12-23
  • 2022-02-08
相关资源
相似解决方案