Playwright + Python:切换标签页

在Web自动化测试脚本中,经常需要在多个打开的标签页之间切换。本文将详细介绍如何使用Playwright和Python进行标签页的切换操作。

基本用法

Playwright提供了简单直观的API来处理标签页。以下是一些基本的标签页操作方法:

创建新标签页

from playwright.sync_api import sync_playwright
with sync_playwright() as p:
    # 启动浏览器并打开一个新页面
    browser = p.chromium.launch()
    page = browser.new_page()

关闭标签页

page.close()

切换到特定标签页

# 假设我们已经有了一个标签页列表
pages = browser.context.pages
# 切换到第一个标签页
page = pages[0]
# 切换到倒数第一个标签页
page = pages[-1]

自定义函数:switch_tab

为了更灵活地在多个标签页之间切换,我们可以定义一个自定义函数switch_tab。这个函数接受一个页面索引作为参数,并切换到对应的标签页。

 def switch_tab(page, page_index: int = 0) -> Page:
        """根据页面索引切换标签页"""
        try:
            while True:
                pages = page.context.pages
                print(f"页签总数 >>> {len(pages)}")
                for page in pages:
                    print(f"当前页签标题为 >>> {page.title()}")
                if len(pages) > 1:
                    page = pages[page_index]
                    break
            return page
            
        except IndexError:
            print(f"窗口索引 {page_index} 超出范围")

自定义函数:bring_to_front

另一个有用的函数是bring_to_front,它可以根据页面的标题或URL切换到相应的标签页。

def bring_to_front(page, title: str = None, url: str = None) -> Page:
    ""“切换到指定title或url的标签页”""
    for item_page in page.context.pages:
        if title:
            if title in item_page.title():
                item_page.bring_to_front()
                return item_page
        elif url:
            if url in item_page.url:
                item_page.bring_to_front()
                return item_page
    else:
        print("未找到相应title或url的标签页")
        return page.context.pages[0]

实际应用

现在,让我们看看如何在实际的自动化脚本中使用这些函数。

from playwright.sync_api import sync_playwright
with sync_playwright() as p:
    browser = p.chromium.launch()
    # 打开多个页面
    page1 = browser.new_page()
    page2 = browser.new_page()
    page2.goto("https://blog.csdn.net/weixin_48321392?type=blog")
    # 使用自定义函数切换标签页
    current_page = switch_tab(page_index=1)  # 切换到第二个标签页
    print(f"当前活动的标签页标题是:{current_page.title()}")
    # 根据标题切换到特定标签页
    target_page = bring_to_front(title="blues_C-CSDN博客")
    print(f"已切换到标题为'CSDN'的标签页,页面URL是:{target_page.url()}")

注意事项

  • 确保在使用bring_to_front函数时,提供的标题或URL是页面标题或URL的一部分,而不是完全匹配。
  • 在使用switch_tab函数时,索引值必须在标签页列表的范围内。

    结语

    通过上述方法,你可以在Playwright和Python中轻松地管理和切换标签页。这些自定义函数可以大大提高你的自动化测试和Web自动化脚本的效率。