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

Python中如何逐个遍历列表元素并按对应范围执行循环?

问题分析与修正

你的代码核心问题是循环逻辑和需求不匹配:
你原本想让第1次外层循环对应遍历1到60,第2次对应1到87,第3次对应1到51,但现在的写法是每个外层循环i,都会把my_list里的所有值(60、87、51)都跑一遍,完全错位了。另外还有两个潜在问题:点击链接后页面没加载完就找元素会报错;如果目标段落数量小于j的值,直接用find_element会抛出异常。

修正后的代码

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

my_list = [60, 87, 51]

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)  # 显式等待,最长等10秒
entries = []

# 同时遍历页面索引(从1开始)和对应需要遍历的最大段落数
for page_idx, max_paragraph in enumerate(my_list, start=1):
    # 回到目录页
    driver.get('https://plato.stanford.edu/contents.html#a')
    # 等待目标链接可点击后再点击
    target_link = wait.until(EC.element_to_be_clickable((By.XPATH, f'//*[@id="content"]/ul[1]/li[{page_idx}]/a')))
    target_link.click()
    
    # 遍历当前页面的1到max_paragraph段落
    for para_num in range(1, max_paragraph + 1):
        try:
            # 等待目标段落加载完成后获取文本
            para_content = wait.until(EC.presence_of_element_located((By.XPATH, f'//*[@id="main-text"]/p[{para_num}]'))).text
            entries.append([para_content])
        except:
            # 段落不存在时跳过,避免程序中断
            print(f"第{page_idx}个页面的第{para_num}段不存在,已跳过")
            continue

driver.close()

关键改动说明

  • 用enumerate(my_list, start=1)同时获取对应页面的索引和每个页面需要遍历的最大段落数,让循环逻辑完全匹配你的需求。
  • 加入显式等待:避免页面未加载完成就查找元素导致的报错,比强制等待更高效灵活。
  • 增加异常捕获:如果某个段落不存在,程序不会直接崩溃,而是跳过并打印提示信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:00:54