首页 / DrissionPage 入门教程 / 单属性定位

DrissionPage 入门教程

单属性定位

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

DrissionPageDrissionPage 入门教程单属性定位@id@class@tag@text

13. 单属性定位

本节目标:掌握四种单属性定位方式,能根据元素的 id、class、标签名或文本内容精确找到目标。

单属性定位是最常用的场景。

一个条件就能确定元素,简单直接。

@id 定位

通过 id 属性定位元素。

快捷写法 #

# 以下两种写法等价
tab.ele('#one')
tab.ele('@id=one')

配合匹配模式

tab.ele('#one')     # 精确匹配:id 等于 one
tab.ele('#:ne')     # 模糊匹配:id 包含 ne
tab.ele('#^on')     # 匹配开头:id 以 on 开头
tab.ele('#$ne')     # 匹配结尾:id 以 ne 结尾

完整写法

tab.ele('@id=one')   # 精确匹配
tab.ele('@id:ow')    # 模糊匹配
tab.ele('@id^ro')    # 匹配开头
tab.ele('@id$w1')    # 匹配结尾

NOTE# 快捷写法只在语句最前面且单独使用时生效。如果和其他条件组合,要用 @id

@class 定位

通过 class 属性定位元素。

快捷写法 .

# 以下两种写法等价
tab.ele('.p_cls')
tab.ele('@class=p_cls')

配合匹配模式

tab.ele('.p_cls')    # 精确匹配:class 等于 p_cls
tab.ele('.:_cls')    # 模糊匹配:class 包含 _cls
tab.ele('.^p_')      # 匹配开头:class 以 p_ 开头
tab.ele('.$_cls')    # 匹配结尾:class 以 _cls 结尾

完整写法

tab.ele('@class=p_cls')    # 精确匹配
tab.ele('@class:_cls')     # 模糊匹配
tab.ele('@class^p_')       # 匹配开头
tab.ele('@class$_cls')     # 匹配结尾

多 class 处理

DrissionPage 和 selenium 处理多 class 的方式不同。

selenium 要把 class="btn primary" 写成 .btn.primary

DrissionPage 把整个 class 当普通字符串:

# 匹配 class 为"btn primary"的元素
tab.ele('.btn primary')

这样更直观,不容易出错。

@tag 定位

通过标签名定位元素。

快捷写法 tag:

# 以下两种写法等价
tab.ele('tag:div')
tab.ele('@tag()=div')

特点

  • tag:tag= 效果一致
  • 没有 tag^tag$ 语法
  • 可以和其他属性组合使用
tab.ele('tag:div')                    # 第一个 div
tab.ele('tag:p@class=p_cls')          # class 为 p_cls 的 p 标签
tab.ele('tag:a@href^https')           # href 以 https 开头的 a 标签

@text 定位

通过元素文本内容定位。

快捷写法

# 以下写法等价
tab.ele('第二行')
tab.ele('text:第二行')
tab.ele('@text()=第二行')

如果不写任何匹配符,默认是模糊匹配。

配合匹配模式

tab.ele('text=第二行')    # 精确匹配:文本等于"第二行"
tab.ele('text:第二')      # 模糊匹配:文本包含"第二"
tab.ele('text^第二')      # 匹配开头:文本以"第二"开头
tab.ele('text$第二行')    # 匹配结尾:文本以"第二行"结尾

特殊字符处理

如果文本包含   等特殊字符,需要转成十六进制:

# 匹配包含   的文本
tab.ele('第\u00A0二')

获取多个元素

ele() 换成 eles() 就能获取所有匹配的:

# 获取所有 div
divs = tab.eles('tag:div')

# 获取所有 class 为 p_cls 的元素
items = tab.eles('.p_cls')

# 获取所有文本包含"行"的元素
rows = tab.eles('text:行')

实际示例

假设有以下 HTML:

<div id="one">
    <p class="p_cls" id="row1">第一行</p>
    <p class="p_cls" id="row2">第二行</p>
    <p class="p_cls">第三行</p>
</div>
<div id="two">第二个div</div>
from DrissionPage import SessionPage

page = SessionPage()
page.get('你的网址')

# 通过 id 定位
div1 = page.ele('#one')

# 通过 class 定位
p1 = page.ele('.p_cls')

# 通过文本定位
p2 = page.ele('第二行')

# 通过标签定位
divs = page.eles('tag:div')

# 模糊匹配
rows = page.eles('text:行')  # 匹配所有包含"行"的元素

TIP:能用 id 就用 id,最稳定。id 不存在时考虑 class 和文本。标签名通常要配合其他属性使用。