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

Selenium翻页脚本找不到下一页按钮报错NoSuchElementException如何处理

问题根因

异常抛出在while driver.find_element_by_class_name('next-page-btn')这一行,该行不在你编写的try...except捕获范围内。Selenium的find_element方法找不到目标元素时会直接抛出NoSuchElementException,不会返回布尔值,原循环判断逻辑本身不成立。

修复后的代码
import time
from selenium.common.exceptions import NoSuchElementException

def moving_pages():
    global driver
    driver.get(url)
    # 先采集第一页数据(原代码会漏掉第一页)
    getdata(driver.current_url)
    print(driver.current_url)

    while True:
        try:
            button = driver.find_element_by_class_name('next-page-btn')
            time.sleep(4)
            button.click()
            getdata(driver.current_url)
            new_url = driver.current_url
            print(new_url)
        except NoSuchElementException:
            print("NO MORE NEXT BUTTON")
            # 退出循环,函数执行结束后后续代码可正常运行
            break
核心修改说明
  • 将原循环的元素存在性判断移除,改为无限循环,把下一页按钮查找、点击的全流程都放到try块内,确保找不到元素时抛出的异常能被except捕获
  • 捕获异常后添加break主动退出循环,避免死循环
  • 补充了第一页数据的采集逻辑,修复原代码漏采集第一页的问题
可选优化方案(不用异常捕获)

如果不想依赖异常捕获做逻辑判断,可以用find_elements方法替代,该方法找不到元素时会返回空列表,不会抛出异常:

def moving_pages():
    global driver
    driver.get(url)
    
    while True:
        # 先处理当前页数据
        getdata(driver.current_url)
        print(driver.current_url)
        # 判断下一页按钮是否存在
        next_btns = driver.find_elements_by_class_name('next-page-btn')
        if not next_btns:
            print("NO MORE NEXT BUTTON")
            break
        # 存在则点击翻页
        time.sleep(4)
        next_btns[0].click()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:45:03