python+playwright 学习-60 在打开的多个标签页窗口灵活切换

2023-08-25 08:54:50 浏览数 (2)

前言

当页面打开了多个标签页后,如何切换到自己需要的标签页上呢?

使用场景

以百度首页为例,当打开多个标签页后, 如何切换到自己想要的页面上操作。

通过context.pages 可以获取到所有的page对象,每一个page对象就代表一个标签页实例

代码语言:javascript复制
from playwright.sync_api import sync_playwright
# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/

with sync_playwright() as playwright:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    page.goto('https://www.baidu.com')

    # 点开多个标签页
    for link in page.locator('#s-top-left>a').all():
        link.click()

    # 遍历page对象
    for i in context.pages:
        print(i.title())

运行结果

代码语言:javascript复制
百度一下,你就知道
hao123_上网从这里开始
百度地图
好看视频--轻松有收获
百度贴吧——全球领先的中文社区
百度新闻——海量中文资讯平台
百度图片-发现多彩世界

通过title 判断页面切换

可以写个公共的函数,通过 title 或者 url 地址判断切换到自己想要的页面

代码语言:javascript复制
from playwright.sync_api import sync_playwright
# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/

def switch_to_page(context, title=None, url=None):
    """切换到指定title 名称 或 url 的 标签页"""
    for item_page in 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("not found title or url")
    return context.pages[0]

with sync_playwright() as playwright:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    page.goto('https://www.baidu.com')

    # 点开多个标签页
    for link in page.locator('#s-top-left>a').all():
        link.click()

    # 打开多个tab 标签页, 切换
    page1 = switch_to_page(context, title='hao')
    print(page1.title())

0 人点赞