📖 知识点
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等操作
⚠️ 易错提醒
- 标签页列表的顺序可能变化,别死记下标,尽量配合
title或url判断- 新开标签页后,页面对象要切到新标签页再操作,否则找的还是旧页面
- 操作完新标签页,可切回原标签页继续
⚔️ Kata 实战任务
任务需求:
- 导入 ChromiumPage,访问百度
- 用
page.new_tab("https://www.bing.com")手动新开一个标签页(也可点击链接触发) - 用
page.tabs获取标签页数量 - 切换到第一个标签页(百度),打印其标题
- 切换到第二个标签页(必应),打印其标题
参考代码
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
🧠 思考题
- 点击链接新开标签页后,如果不切换标签页,直接继续操作,会出什么问题?
page.tabs[1]返回的对象和page有什么关系?能独立操作吗?