You need to enable JavaScript to run this app. 使用Selenium如何正确计算分页组件的总页数?(现有代码返回0)
优惠活动
大模型
产品
解决方案
定价
更多

使用Selenium如何正确计算分页组件的总页数?(现有代码返回0)

Selenium统计分页总页数结果为0问题

需求说明

  • 统计目标页面分页组件的总页数,例:实际总页数为6时,统计得到的长度值应为6
  • 参考分页组件截图可见,组件存在5页以上的页码条目
  • 初始实现逻辑无法正确获取页数,最终返回的长度统计值为0
    分页组件截图

分页组件实际HTML结构

<div class="col-md-12">
    <ul class="pagination">
        <li id="MainCopy_ctl19_Pager_liPrev" class="disabled">
            <a id="MainCopy_ctl19_Pager_PreviousPageButton" title="«" class="aspNetDisabled">«</a>
        </li>
        <li> </li>
        <li id="MainCopy_ctl19_Pager_Repeater1_pager_li_0" class="active">
            <a id="MainCopy_ctl19_Pager_Repeater1_PageLink_0" class="aspNetDisabled">1 </a>
        </li>
        <li id="MainCopy_ctl19_Pager_Repeater1_pager_li_1">
            <a id="MainCopy_ctl19_Pager_Repeater1_PageLink_1" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$MainCopy$ctl19$Pager$Repeater1$ctl01$PageLink&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, true))">2 </a>
        </li>
        <li id="MainCopy_ctl19_Pager_Repeater1_pager_li_2">
            <a id="MainCopy_ctl19_Pager_Repeater1_PageLink_2" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$MainCopy$ctl19$Pager$Repeater1$ctl02$PageLink&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, true))">3 </a>
        </li>
        <li id="MainCopy_ctl19_Pager_Repeater1_pager_li_3">
            <a id="MainCopy_ctl19_Pager_Repeater1_PageLink_3" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$MainCopy$ctl19$Pager$Repeater1$ctl03$PageLink&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, true))">4 </a>
        </li>
        <li id="MainCopy_ctl19_Pager_Repeater1_pager_li_4">
            <a id="MainCopy_ctl19_Pager_Repeater1_PageLink_4" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$MainCopy$ctl19$Pager$Repeater1$ctl04$PageLink&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, true))">5 </a>
        </li>
        <li>
            <a id="MainCopy_ctl19_Pager_NextSectionButton" title="..." href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$MainCopy$ctl19$Pager$NextSectionButton&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, true))">...</a>
        </li>
        <li id="MainCopy_ctl19_Pager_liNext">
            <a id="MainCopy_ctl19_Pager_NextPageButton" title="»" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$MainCopy$ctl19$Pager$NextPageButton&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, true))">»</a>
        </li>
    </ul>
</div>

原有错误实现代码

paginat = len(browser.find_elements_by_xpath('//ul[@class="pagination"]/div/ul'))
print(paginat)
for page1 in range(0,paginat):
    #print(len(pagination))
    print(page1)

错误原因

  1. 路径匹配逻辑完全错位:带pagination类的ul本身是分页组件的最外层容器,它的所有直接子节点都是li标签,不存在嵌套的div、内层ul结构,因此原XPath匹配不到任何元素,最终统计长度为0。
  2. 统计思路本身存在缺陷:就算XPath路径修正为匹配ul下的所有li元素,也无法拿到真实总页数。该分页组件采用分段渲染逻辑,非当前可见区间的页码节点不会插入DOM,初始页面仅渲染当前可见的1-5页节点,后续6-10页的节点只有点击分段切换按钮后才会加载,仅统计初始DOM的节点数量会得到远小于真实值的结果。

修正实现方案

  • 定位规则优化:基于DOM中数字页码元素的固定id特征筛选有效节点,排除上一页箭头、下一页箭头、省略号按钮、空占位li等非页码元素
  • 数值转换逻辑:将筛选到的页码元素文本提取、转为整数后取最大值,即为当前页面可见范围的最高页码
  • 全量总页数获取:由于分页为分段显示机制,需要循环点击下一页按钮,直到下一页按钮变为不可点击的disabled状态,此时页面显示的最大页码即为真实总页数

修正后的基础代码示例:

# 筛选所有带固定id前缀的数字页码元素
page_link_elements = browser.find_elements(
    "xpath",
    '//ul[@class="pagination"]//a[starts-with(@id, "MainCopy_ctl19_Pager_Repeater1_PageLink_")]'
)
# 提取页码文本转为整数列表
page_values = [int(elem.text.strip()) for elem in page_link_elements]
# 获取当前可见的最高页码
visible_max_page = max(page_values)
print(visible_max_page)

内容的提问来源于stack exchange,提问作者abhisekh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.04 03:36:07