首页 / DrissionPage 入门教程 / 结果列表筛选

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.displayedfilter_one.displayed() 效果一样。

search() 或关系筛选

filter() 只能做与关系筛选。search() 支持或关系。

# 筛选可见 或 可点击的元素(满足任一即可)
result = links.search(displayed=True, clickable=True)

search_one() 返回第一个满足任一条件的元素。

# 获取第一个可见或可点击的元素
ele = links.search_one(displayed=True, clickable=True)

search() 支持的参数:

参数类型说明
displayedbool是否可见
checkedbool是否被选中
selectedbool是否被选择
enabledbool是否可用
clickablebool是否可点击
have_rectbool是否有尺寸
have_textbool是否含有文本
tagstr标签类型

混合筛选

与关系和或关系可以混合使用。

# 先筛选可用的,再从中找可见的
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()