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

