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

为什么我的Python for循环只有嵌套在while循环内才能正常运行?

问题原因解析

你遇到的现象本质是Selenium执行元素查找时页面尚未完成渲染:

  • 单独运行for循环时,driver.find_elements_by_css_selector("a[class='link-title']") 会立刻执行,此时页面对应元素还没加载完成,返回空列表,for循环没有可遍历的对象,自然没有输出
  • 加了while循环后生效的逻辑是:初始状态some=0,会反复执行while代码块,直到第一次成功获取到非空的元素列表,for循环开始执行后some累加,最终跳出循环。本质是你用while写了一个非常简陋的「等待元素加载」逻辑。
现有写法的问题
  • 没有超时机制:如果页面元素始终加载失败,代码会陷入死循环
  • 无意义空转:等待过程中会反复执行元素查找,占用不必要的CPU资源
  • 逻辑可读性差:通过累加计数控制循环的方式和实际「等待元素+取前5条」的需求没有直接关联,维护成本高
规范实现方案

用Selenium官方提供的显式等待机制,先等待目标元素加载完成,再提取前5条即可,不需要额外加while循环:

import itertools
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

n = 5
# 显式等待最多10秒,直到页面出现至少1个目标标题元素
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, "a.link-title"))
)
# 提取前5条标题
for title in itertools.islice(driver.find_elements(By.CSS_SELECTOR, "a.link-title"), n):
    print(title.text)

补充说明:find_elements返回的是标准列表,你也可以直接用列表切片简化写法,不需要调用itertools:

titles = driver.find_elements(By.CSS_SELECTOR, "a.link-title")[:n]
for title in titles:
    print(title.text)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:54:03