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

嵌套For循环覆盖文件:爬虫无法生成独立PDF文件的问题

问题修复方案

问题1:嵌套循环逻辑错误

你的外层循环遍历单词链接,每次拿到新PDF链接后,内层循环会遍历所有单词并覆盖它们的PDF文件,导致每个链接都会重写所有单词的PDF,最终所有文件内容完全重复。

修复思路:
将单词和对应的LEO链接一一绑定,每处理一个单词的链接,就只下载该单词对应的PDF,而非遍历所有单词。假设links列表和WordsDictionary的键顺序一致,用zip将两者配对遍历即可。

问题2:仅适配名词,动词处理报错

你固定查找title为Substantivtabelle öffnen的按钮,这只适用于名词。动词的变格表按钮title为Konjugationstabelle öffnen,因此处理动词时会因找不到元素报错。

修复思路:

  • 兼容不同词性的按钮查找逻辑,先尝试名词按钮,找不到则切换动词按钮;
  • 添加异常捕获,遇到元素未找到的情况直接跳过该单词,避免脚本终止。

修正后的代码

import os
import time
from pathlib import Path
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException

# 假设links与WordsDictionary的键顺序一一对应
for wordVar, leoWordLink in zip(WordsDictionary.keys(), links):
    driver.get(leoWordLink)
    try:
        getTableClass = driver.find_element(By.CLASS_NAME, "is-clickable")
        # 优先查找名词变格表按钮,失败则尝试动词按钮
        try:
            getTableClass.find_element(By.XPATH, "//a[@title='Substantivtabelle öffnen']").click()
        except NoSuchElementException:
            getTableClass.find_element(By.XPATH, "//a[@title='Konjugationstabelle öffnen']").click()

        time.sleep(5)

        # 优化XPATH匹配,避免因class属性空格/顺序问题找不到元素
        getPdfTable = driver.find_element(By.XPATH, "//ion-toolbar[contains(@class, 'ion-color-tertiary')]")
        getPdflink = getPdfTable.find_element(By.XPATH, "//ion-button[contains(@class, 'ion-color-primary') and contains(@class, 'button-clear')]").get_attribute("href")

        pdflink = "https://dict.leo.org/" + getPdflink
        print(f"获取到单词 {wordVar} 的PDF链接: {pdflink}")

        # 统一处理目录,避免频繁切换路径
        pdf_dir = Path(cwd) / "pdfsDir"
        pdf_dir.mkdir(exist_ok=True)  # 确保目录存在
        filename = pdf_dir / f"WordPDF_{wordVar}.pdf"
        
        response = requests.get(pdflink)
        filename.write_bytes(response.content)
        print(f"已保存 {wordVar} 的PDF文件")

    except NoSuchElementException as e:
        print(f"处理单词 {wordVar} 时出错:找不到对应元素,跳过。错误信息: {str(e)}")
        continue

关键修改点说明

  1. 循环逻辑修正:用zip配对单词与对应链接,每次循环只处理单个单词的PDF,彻底避免覆盖问题;
  2. 多词性适配:兼容名词和动词的变格表按钮,添加异常捕获保证脚本稳定性;
  3. 路径优化:使用Path对象管理文件路径,确保目标目录存在,避免os.chdir的频繁切换;
  4. XPATH优化:用contains匹配class属性,解决原代码中因class属性空格导致的元素查找失败问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 16:57:33