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

Selenium爬取Vivareal时分页陷入无限循环的问题求助

解决Vivareal爬虫分页无限循环问题

你的问题出在判断按钮是否启用的逻辑上——Selenium的is_enabled()方法只会识别原生的disabled属性,而最后一页的按钮用的是自定义的data-disabled属性,所以之前的判断完全失效,导致无限循环。针对这个按钮的HTML结构,给你几个靠谱的解决思路:

方案1:检查data-disabled属性是否存在

直接通过get_attribute()方法获取该属性,只要属性存在(不管值为空还是其他),就判定为最后一页,终止循环:

next_btn = driver.find_element(By.CLASS_NAME, "js-change-page")
# 若data-disabled属性存在,说明是最后一页
if next_btn.get_attribute("data-disabled") is not None:
    break
# 否则继续点击下一页
next_btn.click()

方案2:判断data-page属性是否为空

最后一页按钮的data-page是空字符串,所以可以通过这个特征判断:

next_btn = driver.find_element(By.CLASS_NAME, "js-change-page")
page_num = next_btn.get_attribute("data-page")
# 若data-page为空,终止循环
if not page_num:
    break
next_btn.click()

方案3:结合两个条件(最稳妥)

为了避免单一判断可能出现的异常,同时检查data-disabled和data-page:

next_btn = driver.find_element(By.CLASS_NAME, "js-change-page")
has_disabled = next_btn.get_attribute("data-disabled") is not None
empty_page = not next_btn.get_attribute("data-page")
if has_disabled or empty_page:
    break
next_btn.click()

额外注意事项

  • 每次获取按钮前,建议用显式等待确保元素加载完成,避免出现NoSuchElementException:
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    wait = WebDriverWait(driver, 10)
    next_btn = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "js-change-page")))
    
  • 点击按钮后,要等待页面内容更新完成再继续爬取,否则可能重复获取同一页数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 13:00:03