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

Selenium爬取Audible分页报错:ValueError无法转空串为整数

解决Selenium提取Audible分页最后一页页码时.text为空的问题

遇到元素已定位但.text返回空的情况,通常是元素未完全渲染、文本通过非标准方式加载(如CSS伪元素)或文本存储在属性中导致的,以下是几种可行的解决方法:

1. 确保元素完全加载(显式等待替代硬等待)

很多时候.text为空是因为元素还没渲染完成,用WebDriverWait等待元素可见后再提取文本:

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

# 替换成你定位最后一页元素的选择器,这里以CSS选择器为例
wait = WebDriverWait(driver, 15)
last_page_elem = wait.until(
    EC.visibility_of_element_located((By.CSS_SELECTOR, "ul.pagination li:last-child a"))
)

last_page_text = last_page_elem.text.strip()
if last_page_text:
    total_pages = int(last_page_text)
else:
    # 执行备选方案
    pass

2. 从元素属性中提取页码

Audible的分页按钮常把页码信息存在aria-label、data-page这类属性里,直接提取属性值:

# 方法1:解析aria-label属性(比如aria-label="Go to page 5")
aria_label = last_page_elem.get_attribute("aria-label")
if aria_label:
    total_pages = int(aria_label.split()[-1])

# 方法2:提取data-page属性(如果元素有这个属性)
page_attr = last_page_elem.get_attribute("data-page")
if page_attr:
    total_pages = int(page_attr)

3. 处理CSS伪元素渲染的文本

如果页码是通过:before/:after伪元素的content属性生成的,用JavaScript获取计算后的样式:

# 获取伪元素的content值
pseudo_content = driver.execute_script(
    "return window.getComputedStyle(arguments[0], ':before').content;", last_page_elem
)
# 去除可能的引号并转成整数
total_pages = int(pseudo_content.strip('"').strip("'"))

4. 从分页链接的URL中解析页码

Audible分页链接的URL通常包含page参数,直接解析URL获取页码:

from urllib.parse import urlparse, parse_qs

last_page_href = last_page_elem.get_attribute("href")
parsed_url = urlparse(last_page_href)
page_params = parse_qs(parsed_url.query).get("page")
if page_params:
    total_pages = int(page_params[0])

优先尝试前两种方法,大部分场景下就能解决问题;如果还是不行,再用伪元素或URL解析的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 01:53:26