首页 / DrissionPage 入门教程 / XPath 与 CSS Selector 兼容

DrissionPage 入门教程

XPath 与 CSS Selector 兼容

本教程共 42 篇 · 第 16 篇 · 更新于 2026-07-29 · 约 5 分钟阅读

DrissionPageDrissionPage 入门教程XPathCSS Selector元素定位

16. XPath 与 CSS Selector 兼容

本节目标:学会在 DrissionPage 中使用 XPath 和 CSS Selector 定位元素,理解两种语法的差异,掌握它们各自的适用场景。

两种语法都能用

DrissionPage 支持两种经典的定位语法:XPath 和 CSS Selector。

如果你之前用过 selenium,对这两种应该不陌生。DrissionPage 兼容它们的写法,迁移成本很低。

XPath 定位

xpath: 开头,后面跟 XPath 表达式。

from DrissionPage import SessionPage

page = SessionPage()
page.get('https://www.baidu.com')

# 用 xpath 查找百度输入框
ele = page.ele('xpath://input[@id="kw"]')
print(ele.tag)  # 输出:input

xpath:xpath= 效果一样,没有 xpath^xpath$ 语法。

在元素内部用 XPath

元素对象的 ele() 也支持 XPath,而且有个贴心设计:// 前面的 . 可以省略。

# 在某个元素下用 xpath 查找
div = page.ele('#content')
p = div.ele('xpath:.//p')  # 标准写法
p = div.ele('xpath://p')   # 省略 .,效果一样

selenium 里省略 . 会变成全局查找,DrissionPage 不会。在元素下查找,就只在该元素内部找。

用 XPath 直接获取属性

这是 DrissionPage 特有的能力。XPath 里可以直接提取属性值,不用先找到元素再取属性。

# 直接获取 div 的 class 属性值
class_str = ele.ele('xpath://div/@class')
print(class_str)  # 输出 class 的字符串值

CSS Selector 定位

css: 开头,后面跟 CSS 选择器。

# 用 css selector 查找元素
ele = page.ele('css:#kw')
print(ele.tag)  # 输出:input

# 查找 class 为 nav 的元素
ele = page.ele('css:.nav')

css:css= 效果一致。

子元素选择器

DrissionPage 的 CSS 定位支持 > 直接子元素选择器,和原生 CSS 语法一致。

# 查找 form 下的直接子元素 input
ele = page.ele('css:>input')

简化写法

XPath 和 CSS 都有简化写法,写起来更短。

# xpath 简化为 x:
ele = page.ele('x://input[@id="kw"]')

# css 简化为 c:
ele = page.ele('c:#kw')

完整对应关系:

原写法简化写法说明
xpath:x:XPath 定位
css:c:CSS Selector 定位
tag:t:按标签名定位
text:tx:按文本定位

直接写 CSS 选择器

如果定位语句没有任何前缀,默认当作 CSS Selector。

# 这两种写法效果一样
ele = page.ele('css:#kw')
ele = page.ele('#kw')

# class 选择器
ele = page.ele('.nav')

# 组合选择器
ele = page.ele('div.container > p.text')

所以平时写 #id.class 的时候,你已经在用 CSS Selector 了。

接收 selenium 定位元组

从 selenium 迁移过来的项目,可能已经写了很多 (By.ID, 'xxx') 这种元组。

DrissionPage 能直接接收这些元组,不用改代码。

from DrissionPage.common import By

# selenium 风格的定位元组
loc = (By.ID, 'kw')
ele = page.ele(loc)

# xpath 元组
loc = (By.XPATH, '//input[@class="s_ipt"]')
ele = page.ele(loc)

XPath 还是 CSS?

两种语法各有特点,选择依据:

维度XPathCSS Selector
功能更强,能向上查找、按文本查找稍弱,只能向下查找
语法稍复杂简洁直观
性能稍慢稍快
适用场景复杂定位、文本查找日常简单定位

实际使用中,80% 的场景用 CSS Selector 就够了。遇到复杂情况再上 XPath。

XPath 支持用

按文本查找://a[text()="登录"]。CSS 没有这个能力,这也是 XPath 的优势之一。

实际例子

假设页面上有个列表,要找到”价格”列中数值大于 100 的行:

# 用 xpath 查找文本包含"100"的 span
ele = page.ele('xpath://span[contains(text(),"100")]')

# 用 css 找 class 为 price 的元素
eles = page.eles('css:.price')

两种写法都能干活,选你觉得顺手的就行。

小结

  • xpath: 开头用 XPath,css: 开头用 CSS Selector
  • 简化写法:x:c:
  • 无前缀默认当作 CSS Selector
  • 支持 selenium 的 loc 元组,迁移方便
  • 元素下查找时,XPath 的 // 前不需要加 .
  • 复杂场景用 XPath,简单场景用 CSS