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

Python使用Selenium遍历动态表格仅获取第一行问题求助

问题根因分析
  • 定位路径写死了行索引:所有元素定位XPath都指定了tr[2],代表只选取表格tbody下的第二行(第一行是表头),find_elements自然只能返回1个元素,循环只会执行1次,只能拿到第一行数据。
  • 字段索引重复错误:states_with_branches和employees两个字段都取了td[7],会导致两个字段值完全相同,后续customer_accounts的索引也会错位。
  • 缺少页面加载等待:点击「Show all」按钮后,动态表格需要加载时间,没有加等待逻辑直接抓取数据,大概率会出现数据不全甚至找不到元素的报错。
  • 多余导入:开头导入的numpy.fabs全程没有使用,可以删除。
修复后的可运行代码
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
import pandas as pd

# 初始化浏览器
driver = webdriver.Chrome(r"C:\Users\noree\OneDrive\Documents\chromedriver.exe")
driver.get('https://www.depositaccounts.com/banks/assets.aspx?instType=&stateType=hq&state=')
driver.maximize_window()

# 等待并点击Show all按钮
show_all_button = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.XPATH, '//*[@id="results"]/div/a'))
)
show_all_button.click()

# 等待表格全部加载完成,获取所有数据行(排除表头行)
rows = WebDriverWait(driver, 15).until(
    EC.presence_of_all_elements_located((By.XPATH, '//*[@id="assetsTable"]/tbody/tr'))
)[1:]  # 索引0是表头,直接跳过

bank_results = []
for row in rows:
    temporary_data={
        'Rank': row.find_element(By.XPATH, './td[1]').text,
        'Financial Institution': row.find_element(By.XPATH, './td[2]/a').text,
        'Headquarters': row.find_element(By.XPATH, './td[3]').text,
        'Assets': row.find_element(By.XPATH, './td[4]').text,
        'Asset Growth': row.find_element(By.XPATH, './td[5]').text,
        'Branches': row.find_element(By.XPATH, './td[6]').text,
        'States with Branches': row.find_element(By.XPATH, './td[7]').text,
        'Employees': row.find_element(By.XPATH, './td[8]').text,
        'Customer Accounts': row.find_element(By.XPATH, './td[9]').text
    }
    bank_results.append(temporary_data)

# 生成DataFrame
df_data = pd.DataFrame(bank_results)
# 导出到Excel,保存路径可自行修改
df_data.to_excel('银行资产数据.xlsx', index=False)

# 关闭浏览器
driver.quit()
主要修改说明
  • 先获取所有表格行,跳过表头后逐行遍历字段,避免不同字段列表长度不一致的问题
  • 新增了显式等待逻辑,确保按钮可点击、表格加载完成后再执行后续操作,避免动态加载导致的数据缺失
  • 修正了字段的td索引错位问题,每个字段对应正确的列位置
  • 新增了Excel导出逻辑,调用to_excel方法直接将DataFrame保存为本地Excel文件,index=False用于去掉默认的行号索引

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:06:03