使用Selenium爬取Audible有声书时的文本提取及分页点击问题
Audible分页爬取问题解决(元素文本为空+无法点击下一页)
一、分页元素文本为空的解决办法
你定位到分页li元素但文本为空,核心原因有两个:
- 文本不在li本身,而是在子元素内:Audible的分页数字实际嵌套在
<li>下的<a>标签里,直接取li.text自然为空。 - 元素未完全加载:页面渲染延迟时,即使元素已被定位,文本还没渲染出来。
对应解决方案:
- 等待元素加载完成后,获取子元素的文本:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待分页栏加载完成 pagination = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.XPATH, '//ul[contains(@class, "pagingElements")]')) ) pages = pagination.find_elements(By.TAG_NAME, 'li') # 取倒数第二个li下的a标签文本 last_page = int(pages[-2].find_element(By.TAG_NAME, 'a').text)
- 如果遇到隐藏元素,可通过
get_attribute获取文本内容:
last_page_text = pages[-2].get_attribute('innerText') last_page = int(last_page_text.strip())
二、无法点击下一页按钮的解决办法
你定位的<span class="nextButton">本身不可点击,Audible的下一页交互实际绑定在其父级<a>标签上,再加上页面加载延迟、元素遮挡等问题,导致点击失败。
对应解决方案:
- 修正定位器,定位可点击的a标签:
# 等待下一页按钮可点击 next_page = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, '//a[contains(@class, "nextButton")]')) ) next_page.click()
- 如果直接点击失败(比如元素被弹窗遮挡),用JS执行点击:
driver.execute_script("arguments[0].click();", next_page)
内容的提问来源于stack exchange,提问作者Muqtasid Tashfin
相关产品推荐
相关产品推荐

