破障篇-Day19|镜中多界咒:多标签页 Tab 切换管理

0 次阅读 2026-10-20 16:35

📖 知识点

1. 多标签页的产生

点击带 target="_blank" 的链接、或执行 page.new_tab(),会在新标签页打开页面。此时浏览器里有多个标签页,各是各的 "世界"。

2. 获取当前所有标签页

DrissionPage 里,每个标签页是一个独立的 "Page 句柄",可通过 page.tabs 管理:

# 获取当前所有标签页列表
tabs = page.tabs
print(len(tabs))  # 当前有几个标签页

3. 切换 / 选择某个标签页

用标签页的 id 或序号定位并激活:

# 用序号选择标签页(0是第一个)
target_tab = page.tabs[1]
# 激活并切换到该标签页
target_tab.set.activate()

切换后,target_tab 这个对象就代表新标签页,可以用它继续操作(get、ele、click 等)。

4. 点击链接自动跳转到新标签页的写法

点击链接后,可以用 wait 等方法拿到新标签页:

# 点击会开新标签页的链接
link = page.ele("某个链接")
link.click()
# 等新标签页出现,激活它
new_tab = page.tabs[1]  # 假设新标签在第二个位置
new_tab.set.activate()
print(new_tab.title)

💡 理解

  • page.tabs 是所有标签页的集合,用下标 [0]、[1]… 访问
  • 标签页.set.activate() 把它设为当前激活页
  • 每个标签页对象都能独立做 get/ele/click 等操作

⚠️ 易错提醒

  1. 标签页列表的顺序可能变化,别死记下标,尽量配合 title 或 url 判断
  2. 新开标签页后,页面对象要切到新标签页再操作,否则找的还是旧页面
  3. 操作完新标签页,可切回原标签页继续

⚔️ Kata 实战任务

任务需求:

  1. 导入 ChromiumPage,访问百度
  2. 用 page.new_tab("https://www.bing.com") 手动新开一个标签页(也可点击链接触发)
  3. 用 page.tabs 获取标签页数量
  4. 切换到第一个标签页(百度),打印其标题
  5. 切换到第二个标签页(必应),打印其标题

参考代码

from DrissionPage import ChromiumPage

page = ChromiumPage()
page.get("https://www.baidu.com")
print("🌐 初始标签页:", page.title)

# 镜中多界咒:新开一个标签页
page.new_tab("https://www.bing.com")
print(f"🎯 当前共有 {len(page.tabs)} 个标签页")

# 切换到第一个标签页(百度)
tab1 = page.tabs[0]
tab1.set.activate()
print("🔄 切换到标签页1:", tab1.title)

# 切换到第二个标签页(必应)
tab2 = page.tabs[1]
tab2.set.activate()
print("🔄 切换到标签页2:", tab2.title)

运行输出(示意):

🌐 初始标签页: 百度一下,你就知道
🎯 当前共有 2 个标签页
🔄 切换到标签页1: 百度一下,你就知道
🔄 切换到标签页2: Bing

🧠 思考题

  1. 点击链接新开标签页后,如果不切换标签页,直接继续操作,会出什么问题?
  2. page.tabs[1] 返回的对象和 page 有什么关系?能独立操作吗?