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

使用Selenium提取HTML表格转pandas DataFrame返回WebElement报错如何解决

Selenium提取HTML表格转DataFrame问题解决方案

问题原因

你当前输出的不是报错,是Selenium定位元素后返回的WebElement对象的默认打印内容。你的代码仅定位到了表格的第二行元素,既没有提取元素内的文本内容,也没有按表格结构做结构化解析,因此输出的是对象标识而非预期的表格数据。

解决方案

推荐直接用pandas自带的read_html方法解析,无需手动逐行处理,修改你的最后两行代码即可:

import pandas as pd
import time
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup

options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu') 
driver = webdriver.Chrome(executable_path = 'mypath/chromedriver.exe', options = options) 
driver.get("https://ai.fmcsa.dot.gov/SMS")
wait = WebDriverWait(driver, 20)
wait.until(EC.element_to_be_clickable((By.XPATH, "//a[@title='Close']"))).click()
wait.until(EC.element_to_be_clickable((By.XPATH, "(//input[@name='MCSearch'])[2]"))).send_keys('1818437')
wait.until(EC.element_to_be_clickable((By.XPATH, "(//input[@name='search'])[2]"))).click()
wait.until(EC.element_to_be_clickable((By.XPATH, "//*[@id='BASICs']/p[2]/a"))).click()

# 以下为修改后的代码
# 等待完整表格加载完成
table_elem = WebDriverWait(driver,20).until(EC.presence_of_element_located((By.XPATH,'//*[@id="BASICs"]/table')))
# 获取表格的完整HTML源码
table_html = table_elem.get_attribute('outerHTML')
# 直接解析为DataFrame
df = pd.read_html(table_html)[0]
print(df)

# 用完关闭浏览器实例
driver.quit()

可选手动解析方案

如果需要自定义提取逻辑,也可以逐行遍历单元格:

# 等待所有行加载完成
rows = WebDriverWait(driver,20).until(EC.presence_of_all_elements_located((By.XPATH,'//*[@id="BASICs"]/table/tbody/tr')))
table_data = []
for row in rows:
    # 提取当前行所有单元格文本
    cell_list = row.find_elements(By.TAG_NAME, 'td')
    row_data = [cell.text.strip() for cell in cell_list]
    if row_data:
        table_data.append(row_data)
# 转换为DataFrame,可自定义表头
df = pd.DataFrame(table_data)
print(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:30:00