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

Selenium TimeoutException报错咨询:网页表格提取失败解决方案

Selenium提取表格时TimeoutException错误排查与解决

问题描述

尝试用以下Selenium代码提取网页https://gemelnet.cma.gov.il/views/dafmakdim.aspx中的表格:

from selenium import webdriver
import time
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup
import pandas as pd
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait


options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
options.add_argument("--disable-gpu")
options.add_argument("--window-size=1920x1080")
options.add_argument("--disable-extensions")
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
                    
URL = 'https://gemelnet.cma.gov.il/views/dafmakdim.aspx'
driver.get(URL)
time.sleep(2)


review=WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//input[@id='knisa']")))
review.click()

table=WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='Aaaa89455bbfe4387b92529246ea52dc6114']//font"))).text()
print(table)

运行时触发错误:raise TimeoutException(message, screen, stacktrace) selenium.common.exceptions.TimeoutException: Message:

错误原因分析

  • 动态类名导致定位失效:代码中使用的Aaaa89455bbfe4387b92529246ea52dc6114属于动态生成的类名,页面刷新或加载后会随机变化,XPath无法匹配到目标元素。
  • 异步加载未正确等待:点击knisa按钮后,表格数据可能通过异步请求加载,仅等待单个元素可见无法确保数据完全渲染。
  • 语法错误:.text()是错误写法,Selenium元素的文本属性为.text(不带括号),即使定位到元素也会触发后续报错。

解决建议

  1. 改用稳定定位器
    打开浏览器开发者工具,找到表格的固定标识(如表格的id、静态类名,或父容器的固定属性)。例如,若表格在固定id的容器内,可调整定位逻辑:

    # 示例:通过表格标签和父容器固定属性定位
    table_element = WebDriverWait(driver, 20).until(
        EC.visibility_of_element_located((By.XPATH, "//div[@id='固定容器ID']//table"))
    )
    
  2. 优化异步加载等待
    点击按钮后,等待表格所有行加载完成,确保数据渲染完毕:

    review.click()
    # 等待表格所有行元素出现
    table_rows = WebDriverWait(driver, 20).until(
        EC.presence_of_all_elements_located((By.XPATH, "//table//tr"))
    )
    # 提取所有行文本并拼接
    table_content = '\n'.join([row.text for row in table_rows])
    print(table_content)
    
  3. 修正文本提取语法
    将代码中的.text()改为.text,避免属性调用错误。

  4. 补充页面加载检查
    在打开页面后,添加等待页面基础结构加载完成的逻辑:

    driver.get(URL)
    # 等待页面body元素加载完成
    WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.TAG_NAME, "body")))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:35:17