DrissionPage 入门教程
结果列表筛选
本教程共 42 篇 · 第 20 篇 · 更新于 2026-07-29 · 约 5 分钟阅读
DrissionPageDrissionPage 入门教程结果筛选filtereles列表操作
20. 结果列表筛选
本节目标:掌握对 eles() 返回的元素列表进行筛选的方法,学会用 filter() 按条件过滤、filter_one() 获取单个元素。
eles() 返回的是什么
eles() 返回的不是普通的 Python 列表,而是一个特殊的元素列表对象。
它支持索引、遍历,还有强大的筛选功能。
from DrissionPage import SessionPage
page = SessionPage()
page.get('https://www.baidu.com')
# 获取所有 a 标签
links = page.eles('t:a')
# 索引取值(从 0 开始)
first = links[0]
second = links[1]
# 遍历
for link in links:
print(link.text)
filter() 筛选
filter() 方法可以按条件筛选元素,返回新的列表。
# 获取导航栏所有链接
links = page('#s-top-left').eles('t:a')
# 筛选出可见的链接
visible = links.filter.displayed()
# 遍历可见链接
for link in visible:
print(link.text, end=' ')
常用筛选条件
| 方法 | 作用 |
|---|---|
displayed() | 筛选可见元素 |
checked() | 筛选被选中的元素 |
selected() | 筛选 select 中被选择的项 |
enabled() | 筛选可用的元素 |
clickable() | 筛选可点击的元素 |
have_rect() | 筛选有尺寸的元素 |
text('xxx') | 筛选包含指定文本的元素 |
attr('name', 'value') | 筛选属性匹配的元素 |
tag('div') | 筛选指定标签的元素 |
多条件筛选(与关系)
筛选支持链式操作,多个条件串联。
# 筛选可见且包含"图"字的链接
result = links.filter.displayed().text('图')
for ele in result:
print(ele.text, end=' ')
每个条件会逐层过滤,最终返回满足所有条件的元素。
filter_one() 获取单个元素
filter_one() 和 filter() 类似,但只返回第一个匹配的元素。
# 获取第一个可见的链接
first = links.filter_one.displayed()
print(first.text)
也可以加序号参数获取第几个:
# 获取第二个包含"图"的元素
ele = links.filter_one(2).text('图')
Note不加序号时,后面的
()可以省略。filter_one.displayed和filter_one.displayed()效果一样。
search() 或关系筛选
filter() 只能做与关系筛选。search() 支持或关系。
# 筛选可见 或 可点击的元素(满足任一即可)
result = links.search(displayed=True, clickable=True)
search_one() 返回第一个满足任一条件的元素。
# 获取第一个可见或可点击的元素
ele = links.search_one(displayed=True, clickable=True)
search() 支持的参数:
| 参数 | 类型 | 说明 |
|---|---|---|
displayed | bool | 是否可见 |
checked | bool | 是否被选中 |
selected | bool | 是否被选择 |
enabled | bool | 是否可用 |
clickable | bool | 是否可点击 |
have_rect | bool | 是否有尺寸 |
have_text | bool | 是否含有文本 |
tag | str | 标签类型 |
混合筛选
与关系和或关系可以混合使用。
# 先筛选可用的,再从中找可见的
result = links.filter.enabled().search(displayed=True)
# 先筛选可见的,再从中找可点击的
ele = links.filter.displayed().search_one(clickable=True)
获取属性集合
筛选结果可以用 get 批量获取属性。
# 获取所有链接的文本
texts = links.get.texts()
print(texts)
# 获取所有链接的 href
hrefs = links.get.attrs('href')
print(hrefs)
# 获取所有链接
links_list = links.get.links()
# 筛选后获取文本
visible_texts = links.filter.displayed().get.texts()
实际例子
采集百度导航栏可见链接:
from DrissionPage import SessionPage
page = SessionPage()
page.get('https://www.baidu.com')
# 获取导航栏所有链接
links = page('#s-top-left').eles('t:a')
# 筛选可见的并获取文本
visible_texts = links.filter.displayed().get.texts()
print(visible_texts)
# 输出:['新闻', 'hao123', '地图', '贴吧', '视频', '图片', '网盘', '文库', '更多']
小结
eles()返回特殊列表对象,支持索引和遍历filter()按条件筛选,支持链式与关系filter_one()返回第一个匹配元素search()支持或关系筛选get.texts()、get.attrs()批量获取属性- 静态元素列表只有
filter_one.text()和filter_one.attr()