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 和文本。标签名通常要配合其他属性使用。