元素操纵篇-Day13|批量搜寻咒:一次性找到多个元素,循环遍历元素列表

0 次阅读 2026-10-20 14:39

📖 知识点

1. 找多个元素:eles ()(复数)

page.eles(选择器) 一次性返回匹配的所有元素列表:

# 找到页面上所有链接
all_links = page.eles("a")
# 找到所有标题类元素
all_titles = page.eles(".title")
print(len(all_links))  # 数一数有几个

对比:page.ele("a") 只返回第一个;page.eles("a") 返回全部(列表)。

2. 循环遍历:for + 列表

拿到元素列表后,用 for 循环逐个处理:

# 遍历所有链接,提取文字
for link in page.eles("a"):
    text = link.text
    if text:
        print(text)

3. 常见应用模式

批量抓取列表数据最经典的写法:

# 抓取页面上所有新闻标题
news_list = page.eles(".news-title")
for idx, news in enumerate(news_list, 1):
    print(f"{idx}. {news.text}")

enumerate(list, 1):给每个元素自动编号,从 1 开始,方便展示序号。

💡 理解

  • eles() 返回列表,支持 len()、for 循环、下标访问
  • 批量操作常用组合:eles 找一批 → for 遍历 → 逐个提取 text/attr
  • 提取到的数据可以存进列表、字典,为后面保存到文件打基础

⚠️ 易错提醒

  1. eles() 返回空列表时,for 循环不会执行,不会报错,但可能没数据
  2. 记得先判断列表是否为空(if not data:)再处理
  3. 遍历时每个元素仍可单独用 .text / .attr() / .click()

⚔️ Kata 实战任务

任务需求:

  1. 导入 ChromiumPage,访问百度
  2. 用 page.eles("a") 一次性找到页面所有链接元素
  3. 打印找到的链接总数
  4. 用 for 循环遍历,提取每个链接的文字,跳过空文字,打印带序号的清单

参考代码

from DrissionPage import ChromiumPage

page = ChromiumPage()
page.get("https://www.baidu.com")

# 批量搜寻咒:一次性找所有链接
all_links = page.eles("a")
print(f"🎯 页面上共有 {len(all_links)} 个链接")

# 循环咒:遍历并提取文字
print("===== 链接文字清单 =====")
for idx, link in enumerate(all_links, 1):
    text = link.text
    if text:  # 跳过空文字
        print(f"{idx}. {text}")

运行输出(内容以实际为准,示意):

🎯 页面上共有 68 个链接
===== 链接文字清单 =====
1. 新闻
2. hao123
3. 地图
4. 贴吧
5. 更多
...

🧠 思考题

  1. page.ele("a") 和 page.eles("a") 返回类型有什么不同?各自返回几个元素?
  2. 如果要抓取页面上某类商品卡片的标题和价格,思路是什么?用循环怎么写?