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
相关产品推荐
相关产品推荐

