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

Selenium中find_elements()返回空列表问题求助

问题分析与解决办法

针对你用Selenium无法获取H5P题目元素的问题,可从以下几个方向排查解决:

  • 检查元素是否在iframe中
    不少H5P内容会嵌入在iframe里,Selenium默认只会在主页面DOM中查找元素,需先切换到对应iframe再操作:

    # 定位iframe(可根据实际情况调整定位方式,比如class、id)
    iframe = driver.find_element(By.TAG_NAME, 'iframe')
    # 切换到iframe
    driver.switch_to.frame(iframe)
    # 此时再执行元素查找操作
    questions = driver.find_elements(By.CSS_SELECTOR, '[id^="h5p-tfq"], [id^="h5p-mcq"]')
    # 操作完成后切回主文档
    driver.switch_to.default_content()
    
  • 改用显式等待替代强制等待
    页面动态加载时,固定时长的sleep不一定能保证元素渲染完成,用显式等待能确保元素出现后再查找:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    wait = WebDriverWait(driver, 10)  # 最多等待10秒
    # 等待任意目标元素出现
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '[id^="h5p-tfq"]')))
    # 再批量获取题目元素
    questions = driver.find_elements(By.CSS_SELECTOR, '[id^="h5p-tfq"], [id^="h5p-mcq"]')
    for q in questions:
        print(q.text)
    
  • 尝试通用选择器匹配动态ID
    若题目ID的前缀固定(如h5p-tfq、h5p-mcq),用CSS选择器匹配前缀比遍历固定ID更灵活:

    # 匹配所有id以h5p-tfq或h5p-mcq开头的元素
    questions = driver.find_elements(By.CSS_SELECTOR, '[id^="h5p-tfq"], [id^="h5p-mcq"]')
    for question in questions:
        print(question.text)
    
  • 排查ChromeDriver与浏览器版本兼容性
    确保ChromeDriver版本和你的Chrome浏览器版本完全匹配,版本不兼容会导致元素查找等功能异常,可在Chrome设置里查看浏览器版本,再下载对应版本的ChromeDriver替换。

  • 检查元素是否在Shadow DOM中
    部分H5P组件会使用Shadow DOM隔离元素,此时需通过JavaScript获取:

    # 需根据实际页面结构调整选择器,找到包含Shadow DOM的容器
    script = """
    const container = document.querySelector('#h5p-content'); // 替换为实际容器选择器
    return container.shadowRoot.querySelectorAll('[id^="h5p-tfq"], [id^="h5p-mcq"]');
    """
    questions = driver.execute_script(script)
    for q in questions:
        print(q.text)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:40:28