Selenium处理动态分页问题:网页存档爬虫无法连续翻页
解决Web Archive爬虫分页跳转失效问题
问题根源
分页元素的ID是动态生成的,每一页都会变化,固定XPath/CSS选择器无法适配所有页面。你之前尝试的两种方法存在语法错误或元素定位逻辑问题,导致无法持续跳转。
修正方案
使用稳定的元素特征定位下一页按钮,比如:
- 按钮的
rel="next"属性(分页组件的标准标识) - 分页栏的通用类名或按钮文本
正确的定位方式
- 通过
rel属性定位(最稳定):
a[rel="next"]
你之前的写法存在引号嵌套错误,导致选择器失效。
- 通过按钮文本定位:
//a[contains(text(), 'Next')]
修改后的完整代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException, StaleElementReferenceException import time URL = "https://web.archive.org/web/20230203123249/https://www.coinpeople.com/forum/64-new-member-information-and-welcome33/" driver = webdriver.Chrome() driver.get(URL) try: while True: # 滚动页面到底部 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(2) # 此处添加爬取当前页面信息的代码 print("正在爬取当前页面...") # 示例:爬取帖子标题 # posts = driver.find_elements(By.CSS_SELECTOR, "h4.ipsDataItem_title a") # for post in posts: # print(post.text) # 等待并点击下一页 try: next_page = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.CSS_SELECTOR, "a[rel='next']")) ) next_page.click() # 等待页面加载完成 time.sleep(3) except (TimeoutException, StaleElementReferenceException): print("没有更多页面了,结束爬取。") break finally: driver.quit()
关键修改点
- 替换固定XPath为
a[rel='next']CSS选择器,该属性不会随页面动态变化 - 将滚动、爬取逻辑放入循环,确保每一页都执行相同操作
- 添加
StaleElementReferenceException捕获,避免页面刷新后元素失效的问题 - 使用
try-finally确保浏览器正常关闭
内容的提问来源于stack exchange,提问作者NewUser
相关产品推荐
相关产品推荐

