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

爬取需点击按钮显示的HTML表格时遇NoSuchElementException求助

解决爬取动态表格时的NoSuchElementException错误

错误原因及修复方案

  • 等待机制不合理:原代码仅设置1秒隐式等待,不足以让动态加载的元素完全渲染完成,改用显式等待可精准等待目标元素的状态变化。
  • 元素定位方式错误:link text仅适用于<a>标签的文本定位,若目标按钮是<button>或其他标签类型,该方式会直接失效,建议改用XPath或CSS选择器定位元素文本。
  • 无头浏览器渲染限制:无头模式下默认窗口尺寸较小,可能导致元素被隐藏,需手动设置窗口大小确保元素可见。

修正后的代码

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
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

# 配置Firefox无头模式及窗口大小
options = Options()
options.headless = True
options.add_argument("--window-size=1920,1080")  # 避免窗口过小导致元素不可见

driver = webdriver.Firefox(options=options)

# 访问目标页面
driver.get('https://datawarehouse.dbd.go.th/company/profile/5/0245552001018')

try:
    # 显式等待按钮可点击,最长等待10秒
    button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, "//*[text()='Financial Information']"))
    )
    button.click()

    # 等待表格加载完成后获取HTML内容
    table = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, '//table'))
    )
    html = table.get_attribute('outerHTML')

    # 转换为DataFrame并输出
    df = pd.read_html(html)[0]
    print(df)

finally:
    # 确保浏览器进程关闭
    driver.quit()

额外提示

  • 若按钮文本存在空格、换行或大小写差异,可将XPath调整为//*[contains(text(), 'Financial Information')]进行模糊匹配。
  • 如果页面存在iframe嵌套,需先通过driver.switch_to.frame(iframe_element)切换到对应iframe后,再定位元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 15:48:30