对比维度 | XPath | CSS Selector |
---|---|---|
语法复杂度 | 较高(需路径表达式) | 简洁(类似前端开发习惯) |
性能 | 较慢(全局遍历) | 更快(浏览器原生优化) |
文本匹配 | ✅ 支持(contains(text(),'abc') ) |
❌ 不支持 |
轴定位 | ✅ 支持(父级、兄弟等) | ❌ 仅支持直接层级(> 、+ 等) |
动态属性处理 | ✅ 灵活(starts-with() 等函数) |
✅ 有限(^= 、$= 等部分匹配) |
伪类/伪元素 | ❌ 不支持(如:hover ) |
✅ 完整支持 |
pythonCopy Code
# XPath:查找父元素
parent_element = driver.find_element(
By.XPATH,
"//input[@id='child']/parent::div"
)
# CSS:仅支持直接子级
child_element = driver.find_element(
By.CSS_SELECTOR,
"div > input#child"
)
pythonCopy Code
# 仅XPath支持文本匹配
element = driver.find_element(
By.XPATH,
"//button[contains(text(), '提交')]"
)
pythonCopy Code
# XPath:部分匹配
element_xpath = driver.find_element(
By.XPATH,
"//div[starts-with(@id, 'prefix_')]"
)
# CSS:属性通配符
element_css = driver.find_element(
By.CSS_SELECTOR,
"div[id^='prefix_']"
)
场景 | 推荐选择 | 原因 |
---|---|---|
简单属性组合 | CSS | 语法简洁,解析速度快 |
需要根据文本定位 | XPath | CSS无法直接操作文本节点 |
跨多层级复杂关系 | XPath | 支持轴定位(如ancestor 、preceding ) |
伪类/状态选择(如:checked ) |
CSS | 原生支持交互状态 |
高频率元素操作 | CSS | 减少浏览器渲染引擎负担 |
matches()
正则匹配)。:has()
等伪类,但复杂选择器仍需谨慎使用。//
全局扫描(XPath)或深层嵌套(CSS)。总结:
根据元素特征和性能需求灵活选择!