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

Python Selenium WebDriver:如何查找含data-sortable-id属性的td元素?

嘿,我来帮你搞定这个问题!首先先把你要处理的表格整理出来,方便咱们看清楚目标元素:

目标表格

ProductMaterialColor
AxeWoodRed
HammerIronBlack
NailMetalBlack
---------
3 Products Listed

你想选中所有带有data-sortable-id属性的<td>元素,你的XPath语法//td[@data-sortable-id]本身是完全正确的——这个语法就是用来匹配所有包含指定属性的元素,不管属性值是什么。那为什么返回长度为0呢?大概率是这几个原因,咱们一个个排查:

1. 元素可能在iframe里

如果你的表格嵌套在<iframe>标签中,WebDriver默认是在主页面的上下文中,根本看不到iframe里的元素。解决方法是先切换到对应的iframe:

from selenium.webdriver.common.by import By

# 先切换到iframe(可以用id、name或者元素定位)
driver.switch_to.frame("your_iframe_id")
# 再查找元素
elements = driver.find_elements(By.XPATH, "//td[@data-sortable-id]")

2. 页面还没加载完成就执行了查找

浏览器渲染页面需要时间,如果你的代码在表格还没渲染出来的时候就执行了查找,自然找不到元素。这时候要加显式等待,确保元素加载完成后再查找:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 等待最多10秒,直到所有目标元素都出现
elements = WebDriverWait(driver, 10).until(
    EC.presence_of_all_elements_located((By.XPATH, "//td[@data-sortable-id]"))
)
print(len(elements))  # 这时候应该会返回3啦

3. 试试更简洁的CSS选择器

除了XPath,你也可以用CSS选择器来匹配带指定属性的元素,语法更直观,有时候在Selenium里表现更稳定:

from selenium.webdriver.common.by import By

elements = driver.find_elements(By.CSS_SELECTOR, "td[data-sortable-id]")

另外提醒一下:现在Selenium已经不推荐使用find_elements_by_xpath这种旧的API了,建议用find_elements(By.XPATH, ...)这种新写法,需要先导入By类哦。

内容的提问来源于stack exchange,提问作者Tan Ory Jaka Perdana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:43:14