DrissionPage 入门教程
文本定位
本教程共 42 篇 · 第 15 篇 · 更新于 2026-07-29 · 约 5 分钟阅读
DrissionPageDrissionPage 入门教程文本定位text定位元素查找
15. 文本定位
本节目标:掌握用文本内容定位元素的方法,包括精确匹配、模糊匹配和开头匹配,学完能快速找到页面上任意文本对应的元素。
为什么需要文本定位
前面几章你学了用 id、class 这些属性找元素。但实际工作中,很多元素没有 id,class 名又长又怪。
这时候文本定位就派上用场了。按钮上写”登录”,链接上写”更多”,直接用文本去找,直观又方便。
text: 开头定位
DrissionPage 支持用 text: 开头,直接按文本内容查找元素。
from DrissionPage import SessionPage
page = SessionPage()
page.get('https://www.baidu.com')
# 查找文本包含"新闻"的元素(模糊匹配)
ele = page.ele('text:新闻')
print(ele.text) # 输出:新闻
这种写法会查找页面上文本包含”新闻”的第一个元素,属于模糊匹配。
精确匹配
精确匹配用 = 符号。只有文本完全一致才会命中。
# 精确匹配文本
ele = page.ele('text=新闻')
print(ele.text) # 输出:新闻
Tip和
text=的区别:text:新闻是模糊匹配(包含即可),text=新闻是精确匹配(必须完全一致)。这和@id属性的规则一样,:表示模糊,=表示精确。
匹配开头
用 ^ 符号可以匹配以某段文本开头的元素。
# 查找文本以"百度"开头的元素
ele = page.ele('text^百度')
print(ele.text)
匹配结尾
用 $ 符号可以匹配以某段文本结尾的元素。
# 查找文本以"地图"结尾的元素
ele = page.ele('text$地图')
print(ele.text)
配合 @ 语法使用
文本定位还能和 @ 语法组合,实现更精确的查找。
# 查找文本为"新闻"的 a 标签
ele = page.ele('@@tag()=a@@text()=新闻')
print(ele.text)
或者用简化写法:
# 查找 class 为"nav"且文本包含"更多"的元素
ele = page.ele('@@class=nav@text():更多')
print(ele.text)
实际小例子
假设页面上有几个按钮,你想点”提交”那个:
from DrissionPage import SessionPage
page = SessionPage()
page.get('https://example.com/form')
# 直接用文本定位并点击
page.ele('text:提交').click()
不需要关心它有没有 id,也不需要知道 class 叫什么。按钮上写什么,你就找什么。
文本定位是大小写敏感的。“Login”和”login”会被当作不同的文本。写的时候注意和页面上保持一致。
和其他定位方式对比
| 方式 | 写法 | 适用场景 |
|---|---|---|
| id | #kw | 元素有 id 时最方便 |
| class | .nav | 按样式类名查找 |
| 文本模糊 | text:新闻 | 元素没属性但能看到文本 |
| 文本精确 | text=新闻 | 需要精确匹配文本 |
| xpath | xpath://a[text()="新闻"] | 复杂场景兜底 |
文本定位的好处是直观。看一眼页面就知道要写什么。
但也有局限:文本变了就得跟着改,国际化场景下不太稳定。
小结
这一节你学了五种文本定位方式:
text:xxx— 模糊匹配(包含即可)text=xxx— 精确匹配text^xxx— 匹配开头text$xxx— 匹配结尾@text():xxx— 组合匹配时配合@或@@使用
实际用得最多的是模糊匹配和精确匹配两种。记住一个原则:能用 id 就用 id,id 没有再用文本。