首页 / DrissionPage 入门教程 / 标签页管理

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 对象可以同时操作不同标签页,不需要切换焦点或激活到前台。它们互不干扰。