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

如何在未找到元素时终止Selenium循环并执行后续代码?

问题描述

我是Hugo,正在爬取一个没有下一页按钮的网站,通过修改URL中的页码来实现爬取。目前用循环遍历URL列表的方式运行正常,但每周条目数量会变化,URL列表里存在多余地址,希望当某页找不到目标HTML元素时,立刻停止遍历后续URL,直接执行导出数据的Pandas代码。比如第20页没条目,就跳过21-25页,直接导出。

之前尝试的问题

  1. 第一种方法无效果:find_elements方法找不到元素时不会抛出NoSuchElementException,只会返回空列表,所以外层的try-except捕获不到异常,循环会继续执行。
  2. 第二种方法报语法错误:break写在except块里,不在循环内部,Python不允许在循环外使用break,因此报错。

正确实现方式

核心思路:每次爬取后检查获取到的元素列表是否为空,为空就直接跳出循环;同时把异常处理放到循环内部,应对页面加载失败等其他错误。

import random
from time import sleep
from selenium import webdriver
import pandas as pd
from datetime import datetime
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.common.exceptions import WebDriverException

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

listawebs = [
    'https://www.***page=1',
    'https://www.***page=2',
    # ... 补充其他页码URL
    'https://www.***page=25'
]

lista_todo = []

for url in listawebs:
    try:
        driver.get(url)
        sleep(random.uniform(0, 1))
        
        # 获取目标元素列表
        todo_elements = driver.find_elements("xpath", './/div[@data-test="mms-search-srp-productlist-item"]')
        if not todo_elements:  # 元素列表为空,说明当前页无条目
            print(f"页面 {url} 无目标条目,停止爬取")
            break
        
        # 提取文本并添加到总列表
        todo_texts = [elem.text for elem in todo_elements]
        lista_todo.extend(todo_texts)
        print(f"成功爬取页面 {url},共获取 {len(todo_texts)} 条数据")
        
    except WebDriverException as e:
        print(f"爬取页面 {url} 时出错: {str(e)}")
        break  # 遇到错误也停止爬取,若想跳过错误页继续爬,可改为continue

# 导出数据到CSV
df = pd.DataFrame({"nombre": lista_todo})
now = datetime.now()
currentDateTime = now.strftime("%m-%d-%Y %H-%M-%S %p")
df.to_csv(f"file_name {currentDateTime}.csv", encoding='utf-8-sig')  

driver.quit()

关键说明

  • 判断无条目的核心逻辑:用if not todo_elements检查元素列表是否为空,这比捕获异常更准确,因为find_elements找不到元素时不会抛出异常。
  • 修复语法错误:把try-except放到循环内部,break处于循环范围内,不会再触发语法错误。
  • 增加调试日志:打印每一页的爬取状态,方便快速定位停止的页码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:22:55