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

Python Selenium查找元素过慢,如何快速提取表格td文本?

快速提取表格文本的性能优化方案

问题场景

需要快速提取以下HTML结构中所有<td>的文本:

<body>
    <tbody id="data-table">
       <tr>
          <td>
          </td>
          <td>
          </td>
          <td>
          </td>
          <td>
          </td>
       </tr>
       <tr>
          <td>
          </td>
          <td>
          </td>
          <td>
          </td>
          <td>
          </td>
       </tr>
       <tr>
          <td>
          </td>
          <td>
          </td>
          <td>
          </td>
          <td>
          </td>
       </tr>
    </tbody>
</body>

原实现代码因反复调用find_element导致性能极差:

main_table = driver.find_element(By.ID, "data-table")
for i in range(3):
     main_table.find_element(By.XPATH, "tr[" + str(i + 1) + "]/td[1]").text
     main_table.find_element(By.XPATH, "tr[" + str(i + 1) + "]/td[2]").text
     main_table.find_element(By.XPATH, "tr[" + str(i + 1) + "]/td[3]").text

每次元素查找耗时近200ms,3行数据循环耗时超1.8秒;若处理100+行、每行5个<td>的表格,耗时将超100秒。希望能一次性提取主表下所有子标签,通过纯Python逻辑处理,减少浏览器交互次数。


优化方案

方案1:批量获取行与单元格

通过find_elements(复数形式)一次性获取所有行,再遍历每行获取对应单元格,大幅减少浏览器通信次数:

main_table = driver.find_element(By.ID, "data-table")
# 一次性获取表格内所有行
rows = main_table.find_elements(By.TAG_NAME, "tr")
for row in rows:
    # 一次性获取当前行的所有单元格
    cells = row.find_elements(By.TAG_NAME, "td")
    for cell in cells:
        print(cell.text)

方案2:直接批量获取所有

用XPath定位所有目标<td>,一次性获取后遍历处理:

# 直接定位data-table下所有<td>元素
all_cells = driver.find_elements(By.XPATH, "//tbody[@id='data-table']//td")
for cell in all_cells:
    print(cell.text)

方案3:本地解析HTML源码(性能最优)

获取表格的HTML源码后,用Python本地解析库(如BeautifulSoup)处理,完全避免多次浏览器交互:

from bs4 import BeautifulSoup

main_table = driver.find_element(By.ID, "data-table")
# 获取表格完整HTML代码
table_html = main_table.get_attribute("outerHTML")
# 本地解析HTML
soup = BeautifulSoup(table_html, "html.parser")

# 遍历提取所有<td>文本
for td in soup.find_all("td"):
    # strip=True可去除文本前后空白字符
    print(td.get_text(strip=True))

性能优化原理

原方案慢的核心原因是每次调用find_element都会触发Python与浏览器的跨进程通信,频繁调用会产生大量IO开销。优化方案通过批量获取元素或本地解析HTML,将多次通信减少为1~2次,性能提升幅度可达数十倍。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:05:27