使用selenium导航分页

2024-10-01 19:19:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我被一个奇怪的分页问题困住了。我正在从https://cotthosting.com/NYRocklandExternal/LandRecords/protected/SrchQuickName.aspx抓取搜索结果

我有四个类别的搜索结果。在

1)没有搜索结果

2)有一个结果页面

3)结果页多于一页但少于12页

4)结果页超过12页。在

对于案例1,这很简单,我只是路过而已。在

results = driver.find_element_by_class_name('GridView')
if len(results)== 0:
    pass

对于案例2和3,我检查包含元素中的链接列表是否至少是一个,然后单击它。在

^{pr2}$

案例2和3的问题:我可以在这里检查什么作为我的对照?在

这些链接是到第2页、第3页等的href链接,但最棘手的是,如果我在当前页面上,比如说第1页,我如何确保我会转到第2页,当我在第2页时,如何确保我会转到第3页?结果列表第1页的html如下所示

<table cellspacing="0" cellpadding="0" border="0" style="border-collapse:collapse;">
   <tr>
      <td>Page: <span>1</span></td>
      <td><a href="javascript:__doPostBack(&#39;ctl00$cphMain$lrrgResults$cgvNamesDir&#39;,&#39;Page$2&#39;)">2</a></td>
      <td><a href="javascript:__doPostBack(&#39;ctl00$cphMain$lrrgResults$cgvNamesDir&#39;,&#39;Page$3&#39;)">3</a></td>
   </tr>
</table>

我可以专门使用sub_tables[1]在案例2中查看上面的bs4代码。在

问题是没有下一步按钮,我可以利用。html中的结果页面没有任何变化。除了链接前面的span中的数字之外,没有什么可以隔离当前页面的。我希望它在最后一页停止

对于案例4,html如下所示:

<table cellspacing="0" cellpadding="0" border="0" style="border-collapse:collapse;">
   <tr>
      <td>Page: <span>1</span></td>
      <td><a href="javascript:__doPostBack(&#39;ctl00$cphMain$lrrgResults$cgvNamesDir&#39;,&#39;Page$2&#39;)">2</a></td>
      <td><a href="javascript:__doPostBack(&#39;ctl00$cphMain$lrrgResults$cgvNamesDir&#39;,&#39;Page$3&#39;)">3</a></td>
      <td><a href="javascript:__doPostBack(&#39;ctl00$cphMain$lrrgResults$cgvNamesDir&#39;,&#39;Page$4&#39;)">4</a></td>
      <td><a href="javascript:__doPostBack(&#39;ctl00$cphMain$lrrgResults$cgvNamesDir&#39;,&#39;Page$5&#39;)">5</a></td>
      <td><a href="javascript:__doPostBack(&#39;ctl00$cphMain$lrrgResults$cgvNamesDir&#39;,&#39;Page$6&#39;)">6</a></td>
      <td><a href="javascript:__doPostBack(&#39;ctl00$cphMain$lrrgResults$cgvNamesDir&#39;,&#39;Page$7&#39;)">7</a></td>
      <td><a href="javascript:__doPostBack(&#39;ctl00$cphMain$lrrgResults$cgvNamesDir&#39;,&#39;Page$8&#39;)">8</a></td>
      <td><a href="javascript:__doPostBack(&#39;ctl00$cphMain$lrrgResults$cgvNamesDir&#39;,&#39;Page$9&#39;)">9</a></td>
      <td><a href="javascript:__doPostBack(&#39;ctl00$cphMain$lrrgResults$cgvNamesDir&#39;,&#39;Page$10&#39;)">10</a></td>
      <td><a href="javascript:__doPostBack(&#39;ctl00$cphMain$lrrgResults$cgvNamesDir&#39;,&#39;Page$11&#39;)">...</a></td>
      <td><a href="javascript:__doPostBack(&#39;ctl00$cphMain$lrrgResults$cgvNamesDir&#39;,&#39;Page$Last&#39;)">Last</a></td>
   </tr>
</table>

最后两个链接是...表示有更多的结果页,Last表示最后一页。但是,最后一个链接存在于每个页面上,只有最后一个页面本身才不是活动链接。在

对于案例4的问题,我如何检查last链接是否可单击并将其作为停止点?在

对于案例4,更大的问题是,我如何操作...来浏览其他结果页面?结果页面列表最多12个值。i、 e.最接近当前页面的10个页面,...链接到更多页面,Last链接。所以如果我的结果是88页,我不知道该怎么办。在

我将一个转储链接到一个完整的示例页:https://ghostbin.com/paste/nrb27


Tags: 链接pagetable页面javascript案例tdhref
3条回答

点击“最后一页”获取他的号码,然后点击每个孩子。在

您应该做的是计算一个页面中的结果数,并使用总结果中的值除以来估计总页数。在

如果你检查一下这一页,你会看到:

Displaying records 1 - 500 of 32563 at 10:08 AM ET on 9/16/2016

了解页面的总数,启动导航并检查页面是否已加载(如果需要),并且知道当前页面,则可以根据页面为页面导航编号提供动态选择器,用于2种情况:

  • 如果页码不是一个链接,那么你就在那个页面上
  • 如果页码是一个链接,你可以用它来点击

您不需要4个类别,因为: -您可以计算结果的数量以及在一个页面上可以显示多少个结果 -知道页数

  1. 创建一个方法,以便在需要时使用for或其他控件结构进行导航
  2. 对于每个导航,执行您需要执行的操作

或者转到最后一页并向后开始,直到第1页不是链接。在

首先你要知道你在哪一页。要实现这一目标:

使用xpath元素查找当前页:

currentPageElement = driver.find_element(By.XPATH, '//table[./tbody/tr/td[text()='Page: ']]//span')

然后提取数字:

^{pr2}$

然后你可以做任何事情:转到下一页,在当前页码上加1,到最后一页读这个数字,等等

相关问题 更多 >

    热门问题