You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python Selenium提取网页总页数返回0 of 0的问题求解

问题排查与修复方案

存在的问题

  1. 代码存在变量名笔误:你将定位到的分页元素赋值给了totpage变量,但后续打印时调用的是page.text,若未提前定义page变量会直接报错,若实际运行时写的是totpage.text,则是下述两个原因导致返回错误值。
  2. 元素获取时机过早:你使用的是Angular Material框架的分页组件,初始化时默认渲染值为0 of 0,待页面列表接口请求完成后才会更新为真实分页数据,你在接口返回前就提取了元素文本,拿到的是初始默认值。
  3. XPath定位错误:若XPath路径匹配到了页面中隐藏的备用分页组件、旧版本分页元素,也会返回错误的0 of 0结果。

修复代码示例

先导入依赖:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import math

核心逻辑:

# 显式等待10秒,直到分页元素渲染出真实数据
wait = WebDriverWait(driver, 10)
page_label_ele = wait.until(
    lambda d: 
    d.find_element(By.CLASS_NAME, "mat-paginator-range-range-label").text.strip() not in ["", "0 of 0"]
)
# 提取文本并计算总页数
label_text = page_label_ele.text.strip()
per_page = int(label_text.split(" ")[2].strip())
total_count = int(label_text.split(" ")[-1].strip())
# 向上取整避免除不尽丢失最后一页
total_page = math.ceil(total_count / per_page)
print(f"总页数:{total_page}")

替代方案

  • 方案1:直接读取组件属性,比解析文本更稳定
    Angular Material的分页组件自带数据绑定属性,不需要解析文本,直接通过JS提取即可:
# 直接读取分页组件内置的总条数、每页条数属性
total_count = driver.execute_script('return document.querySelector("mat-paginator").length')
per_page = driver.execute_script('return document.querySelector("mat-paginator").pageSize')
total_page = math.ceil(total_count / per_page)
  • 方案2:不计算总页数,直接遍历到下一页不可点击为止
    如果你的核心需求是遍历全站内容,可以跳过计算总页数的步骤,直接判断下一页按钮状态,直到按钮置灰停止遍历,鲁棒性更高:
while True:
    # 处理当前页的数据抓取逻辑
    parse_current_page()
    # 定位下一页按钮
    next_btn = driver.find_element(By.CLASS_NAME, "mat-paginator-navigation-next")
    # 判断下一页是否可点击
    if next_btn.get_attribute("disabled") is not None:
        break
    next_btn.click()
    # 等待页面刷新完成
    wait.until(EC.staleness_of(next_btn))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:24:00