DrissionPage 入门教程
标签页管理
本教程共 42 篇 · 第 9 篇 · 更新于 2026-07-29 · 约 6 分钟阅读
DrissionPageDrissionPage 入门教程标签页多标签页Tab对象
9. 标签页管理
本节目标:掌握多标签页的创建、获取、切换和关闭,能处理点击打开新标签页的场景。
浏览器自动化经常要面对多个标签页。
DrissionPage 对标签页的管理很直观,不需要像 selenium 那样切窗口句柄。
获取标签页
latest_tab
获取最新激活的标签页:
browser = Chromium()
tab = browser.latest_tab
get_tab()
按条件精确查找:
# 按序号获取(从 1 开始)
tab = browser.get_tab(1)
tab = browser.get_tab(-1) # 倒数第一个
# 按 ID 获取
tab = browser.get_tab('5399F4ADFE3A27503FFAA56390344EE5')
# 按标题模糊匹配
tab = browser.get_tab(title='百度')
# 按 URL 模糊匹配
tab = browser.get_tab(url='baidu.com')
# 按类型筛选
tab = browser.get_tab(tab_type='page')
# 组合条件(与关系)
tab = browser.get_tab(title='百度', url='baidu.com')
get_tabs()
获取所有符合条件的标签页:
# 获取所有标签页
tabs = browser.get_tabs()
# 按条件筛选
tabs = browser.get_tabs(url='gitee.com')
NOTE:序号不是视觉顺序,而是激活顺序。最近激活的标签页序号最小。
新建标签页
# 新建空标签页
tab = browser.new_tab()
# 新建并打开网址
tab = browser.new_tab('https://www.baidu.com')
# 后台打开(不激活)
tab = browser.new_tab('https://www.baidu.com', background=True)
TIP:批量新建标签页时,先不传 URL 创建空标签页,再用
get()访问。可以避免每个都等待加载完成。
激活标签页
# 按 ID 激活
browser.activate_tab('tab_id_xxx')
# 按序号激活
browser.activate_tab(1)
# 按对象激活
browser.activate_tab(tab)
关闭标签页
# 关闭指定标签页
browser.close_tabs(tab)
# 关闭多个
browser.close_tabs([tab1, tab2])
# 关闭指定之外的所有
browser.close_tabs(tab, others=True)
Tab 对象也可以直接关闭自己:
tab.close()
点击打开新标签页
这是个常见场景:点击链接后新标签页打开,需要操作新页面。
click.for_new_tab()
点击元素并在新标签页打开,返回新标签页对象:
tab = Chromium().latest_tab
tab.get('https://gitee.com/explore/all')
links = tab.eles('t:h3')
for link in links[:-1]:
# 点击并获取新标签页
new_tab = link.click.for_new_tab()
new_tab.wait.load_start()
print(new_tab.title)
new_tab.close()
click.middle()
中键点击 <a> 元素,强制在新标签页打开:
tab2 = ele.click.middle()
tab2.set.activate()
多标签页协同
下面这个例子展示了典型的多标签页工作流程:
from DrissionPage import Chromium
tab = Chromium().latest_tab
tab.get('https://gitee.com/explore/all')
# 获取所有项目标题
links = tab.eles('t:h3')
for link in links[:-1]:
# 点击标题,在新标签页打开
new_tab = link.click.for_new_tab()
# 等待新标签页加载
new_tab.wait.load_start()
# 获取信息
print(new_tab.title)
# 关闭新标签页,回到列表页
new_tab.close()
标签页信息
# 标签页数量
print(browser.tabs_count)
# 所有标签页 ID
print(browser.tab_ids)
# Tab 对象自身的属性
print(tab.title) # 标题
print(tab.url) # 当前 URL
print(tab.tab_id) # 标签页 ID
TIP:多个 Tab 对象可以同时操作不同标签页,不需要切换焦点或激活到前台。它们互不干扰。