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

Python Selenium XPath定位表格返回空字符串问题排查

问题产生原因
  • 标签内容默认隐藏、hash跳转不触发激活:该站点的标签切换完全由前端JS控制,你直接访问带#tabs-3的锚点链接,不会自动把第三个标签切为激活状态;目标表格所在的标签面板默认加了display: none样式处于隐藏状态,Selenium对隐藏元素调用.text会直接返回空字符串。此时页面实际激活的是第一个标签,所以你取页面innerHTML只能拿到第一个标签的内容。
  • 没有等待动态内容加载:页面初始渲染、标签切换、表格数据拉取填充都是异步执行的,你发起页面请求后立刻查找元素,此时表格的外层DOM节点虽然已经存在(所以find_element不会抛异常),但内部的动态数据还没填充,自然拿不到有效内容。
  • 你使用的find_element_by_xpath是Selenium 3的已废弃API,在Selenium 4版本下兼容性差,很容易出现元素定位成功但交互/取值异常的问题。
解决步骤
  1. 页面初始加载完成后,主动定位第三个标签的触发按钮执行点击,手动激活目标标签,不要依赖hash锚点自动切换。
  2. 配置显式等待,等标签切换完成、表格内部的行元素渲染可见后,再提取表格内容,不要在页面刚跳转就立刻取数据。
  3. 替换废弃的元素定位API,使用Selenium 4原生支持的By类定位方式,避免兼容性问题。
修正后参考代码
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化浏览器驱动
PATH = "C:\Program Files (x86)\chromedriver.exe"
tubitak_ua_driver = webdriver.Chrome(service=Service(PATH))
# 设置最长15秒的显式等待
wait = WebDriverWait(tubitak_ua_driver, 15)

tubitak_ua_driver.get("https://uidb-pbs.tubitak.gov.tr/#tabs-3")

# 主动点击激活第三个标签
third_tab = wait.until(EC.element_to_be_clickable((By.XPATH, '//li[@aria-controls="tabs-3"]')))
third_tab.click()

# 等待表格主体可见、内部数据行渲染完成
project_table_tbody = wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="programCagriListTable"]/tbody')))
wait.until(EC.presence_of_all_elements_located((By.XPATH, '//*[@id="programCagriListTable"]/tbody/tr')))

# 此时提取文本即可拿到正常内容
print(project_table_tbody.text)

# 用完后关闭驱动
# tubitak_ua_driver.quit()
额外注意事项
  • 如果页面首次加载弹出Cookie同意提示、公告弹窗,要先定位弹窗关闭按钮执行点击,否则标签点击会被遮挡层拦截,导致切换失效。
  • 如果点击标签后出现加载转圈动画,可以额外加等待逻辑等加载动画节点消失后再取表格内容,避免拿到加载中的空状态。
  • 该表格为分页展示,需要模拟翻页操作才能拿到全量数据,上述代码仅能拿到默认第一页展示的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 18:27:32