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

Selenium报错NoSuchElementException:已获数据仍报错求助

问题分析

你遇到的问题根源在于初始定位loans时选了表格下的所有子元素,这个集合的长度远大于实际的贷款列表行数。当循环的i值超过表格实际存在的行数时,driver.find_element就找不到对应行的元素,抛出NoSuchElementException。

比如你用//*[@id="comparison-table-0000000000"]//*会选中表格里的所有单元格、文本节点、按钮等,数量可能有几百个,但实际表格的行可能只有十几行,循环到超过行号的i时自然找不到元素。

解决方案

修改初始定位逻辑,直接获取表格的所有行元素,然后遍历这些行来提取数据:

import datetime
import pandas as pd
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.Chrome()
url = 'https://www.finder.com.au/home-loans'
driver.get(url)

driver.execute_script("window.scrollTo(0, 2080)") 

get_today = datetime.datetime.now()
today = get_today.strftime('%d/%m/%Y')
affiliate = 'Finder'
rank = 1

results = []

# 直接定位表格的所有行,而不是所有子元素
loan_rows = WebDriverWait(driver, 30).until(
    EC.presence_of_all_elements_located((By.XPATH, '//*[@id="comparison-table-0000000000"]/tbody/tr'))
)

# 遍历每一行,避免索引越界问题
for row in loan_rows:
    # 从当前行内查找a标签,比全局查找更准确高效
    try:
        loan_listing = row.find_element(By.XPATH, './/a[1]').text
        print(loan_listing.split(' ', 1))
    except Exception as e:
        # 处理个别行没有a标签的情况,避免程序中断
        print(f"该行提取失败: {e}")
        continue
关键优化点
  • 精准定位行元素:用//*[@id="comparison-table-0000000000"]/tbody/tr直接获取所有贷款行,确保循环次数等于实际行数。
  • 行内查找元素:通过row.find_element从当前行内定位a标签,减少全局查找的开销,同时避免其他区域元素干扰。
  • 异常捕获:添加try-except块处理个别行结构异常的情况,保证程序能完整执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:40:23