首页 / DrissionPage 入门教程 / 简化写法

DrissionPage 入门教程

简化写法

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

DrissionPageDrissionPage 入门教程简化写法语法糖快速定位

21. 简化写法

本节目标:掌握 DrissionPage 的简化定位语法,学会把 Tab 对象当函数用,以及各种定位符的简写,写出更简洁的代码。

Tab 对象当作函数

DrissionPage 的页面对象和元素对象都实现了 __call__() 方法。

这意味着你可以像调用函数一样调用它们,效果等同于 ele()

from DrissionPage import SessionPage

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

# 原写法
ele = page.ele('#kw')

# 简化写法
ele = page('#kw')

两种写法完全等价,但简化写法更短,链式操作时更清晰。

# 原写法:查找导航栏中的第一个链接
ele = page.ele('#s-top-left').eles('t:a')[0]

# 简化写法
ele = page('#s-top-left')('t:a')[0]

定位符简化

各种定位符都有对应的简写,让语句更短。

原写法简化写法说明
@id#id 属性匹配
@class.class 属性匹配
texttx按文本匹配
@text()@tx()与 @ 或 @@ 配合时
tagt按标签名匹配
@tag()@t()与 @ 或 @@ 配合时
xpathxXPath 方式
csscCSS Selector 方式
# tag 简化为 t
ele = page.ele('tag:div')  # 原写法
ele = page('t:div')        # 简化写法

# xpath 简化为 x
ele = page.ele('xpath://div[@class="nav"]')  # 原写法
ele = page('x://div[@class="nav"]')          # 简化写法

# text 简化为 tx
ele = page.ele('text=登录')  # 原写法
ele = page('tx=登录')        # 简化写法

# css 简化为 c
ele = page.ele('css:.nav')  # 原写法
ele = page('c:.nav')        # 简化写法

# 和 . 的注意事项

#. 只在语句最前面且单独使用时才生效。

# 正确:# 在最前面
ele = page('#kw')

# 正确:. 在最前面
ele = page('.nav')

# 错误:# 不在最前面时无效
ele = page('@@id=kw@@class=nav')  # 这里 # 不会被识别为 id 简写

Shadow Root 简化

获取元素的 shadow root 一般用 ele.shadow_root

因为这个名字太长,链式操作时影响可读性,所以提供了简写 sr

# 原写法
txt = ele.shadow_root.ele('t:div').text

# 简化写法
txt = ele.sr('t:div').text

多级 shadow root 链式操作时,简写的好处更明显:

# 多级 shadow root
items = tab('#history-app').sr('#history').sr.eles('t:history-item')

相对定位参数简化

相对定位时,如果只关心第几个元素,不关心类型,可以直接传数字。

# 原写法
ele2 = ele1.next(index=2)

# 简化写法:第一个参数传数字自动识别为 index
ele2 = ele1.next(2)

这个简化适用于所有相对定位方法:

ele2 = ele1.parent(2)    # 获取第二层父元素
ele2 = ele1.next(2)      # 获取后面第二个兄弟
ele2 = ele1.before(2)    # 获取前面第二个元素
ele2 = ele1.child(3)     # 获取第三个子节点

什么时候用简化写法

简化写法的优势在链式操作时最明显:

# 原写法,比较长
ele = tab.ele('#nav').ele('.menu').ele('tag:a')

# 简化写法,更紧凑
ele = tab('#nav')('.menu')('t:a')

但简化写法也有缺点:可读性稍差,新手可能看不懂。

建议:

  • 简单查找用简化写法
  • 复杂定位用完整写法,更清晰
  • 团队协作时统一风格

小结

  • page('xxx') 等同于 page.ele('xxx')
  • t: 替代 tag:x: 替代 xpath:
  • tx: 替代 text:c: 替代 css:
  • sr 替代 shadow_root
  • 相对定位可以直接传数字作为序号
  • 简化写法让链式操作更简洁