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

通过Selenium导航下载课程问题:单课下载失败及全页遍历方法咨询

问题排查与解决方案

脚本直接关闭的原因排查

  • 缺失必要导入包:代码中使用的webdriver、WebDriverWait、expected_conditions(即代码中的EC)、By都没有提前导入,运行时直接抛出异常进入except分支,触发driver.quit()导致页面直接关闭。
  • 裸异常捕获无日志:当前使用无限制的except会捕获所有类型的错误,不会输出错误信息,无法定位具体问题。
  • 绝对路径XPATH稳定性差:从浏览器直接复制的绝对XPATH依赖页面固定层级结构,只要页面动态渲染时插入了新的DOM节点,路径就会失效触发异常。

修正后的可运行基础代码

# 补充缺失的导入
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

driver = webdriver.Firefox()
driver.get("https://www.dw.com/en/learn-german/deutsch-warum-nicht-series-3/s-2552")

try:
    # 替换为更稳定的相对XPATH,匹配课程标题链接
    element = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, '//div[@id="bodyContent"]//a[contains(@href, "learn-german")]/h2'))
    )
    element.click()
    
    # 后续操作可根据实际页面调整定位规则
    element2 = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, '//div[@id="bodyContent"]//a[contains(text(), "Lesson")]/h2'))
    )
    element2.click()
    
# 捕获具体异常并打印,方便定位问题
except Exception as e:
    print(f"运行出错:{e}")
# 调试阶段可注释quit操作,方便查看页面实际状态
finally:
    # driver.quit()
    pass

全课程遍历的最优实现逻辑

  • 先收集所有课程入口URL:在列表页先提取当前页所有课程的跳转链接存入单独的列表,不要边点边爬,避免页面跳转后DOM状态混乱。
  • 按URL逐个访问处理:遍历已收集的URL列表,单独访问每个课程页执行下载逻辑,单页出错不影响整体流程,也方便单独重试失败的页面。
  • 分页处理逻辑:如果课程分布在多个分页,先循环点击下一页,每加载完一页就收集当前页的课程URL,直到检测不到下一页按钮为止,再统一处理所有URL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:54:03