Python Selenium WebDriver:如何查找含data-sortable-id属性的td元素?
嘿,我来帮你搞定这个问题!首先先把你要处理的表格整理出来,方便咱们看清楚目标元素:
目标表格
| Product | Material | Color |
|---|---|---|
| Axe | Wood | Red |
| Hammer | Iron | Black |
| Nail | Metal | Black |
| --- | --- | --- |
| 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
相关产品推荐
相关产品推荐

