首页 > 编程语言 >python+playwright 学习-60 在打开的多个标签页窗口灵活切换

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

时间:2023-05-04 10:11:22浏览次数:31  
标签:playwright title python 标签 60 item context page

前言

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

使用场景

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

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

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())

运行结果

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

通过title 判断页面切换

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

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())

标签:playwright,title,python,标签,60,item,context,page
From: https://www.cnblogs.com/yoyoketang/p/17370243.html

相关文章

  • 学习python太枯燥?一招让你爱上学python!
    如果你认为学习编程需要看枯燥乏味的教科书,那么你就大错特错了!现在,有一种全新的学习方式,让你在欣赏流行漫画的同时轻松掌握Python编程的技巧!![image-20230504071523860](http://pic.lovelifelovedream.com/typora/image-20230504071523860.png)《看漫画学Python》是一本独特而又......
  • 通过Python进行MySQL表信息统计
    在上一篇文章中简单的介绍了使用python-mysql-replication来解析MySQLbinlog来完成实时统计的业务,当然,在现实的业务中不可能用的那么简单的。啰哩八说今天的目的不是介绍真实的业务场景如何使用python-mysql-replication,而是推出一枚<MySQL表信息统计>小工具(笔者通过......
  • python中如何使两个序列相加不改变内存地址的几种方式
    #方式1a=[1,2,3]print(a)#4551311680a.extend([4,5])print(a)#4551311680#方式2b=[1,2,3]print(b)#4494299456b+=[4,5,6]print(b)#4494299456#重点讲解方式2+=的方式是因为内部实现了__iadd__()魔法方法,内部行为类似于a.extend(b)。但是要区别于b=......
  • Python_16 配置文件与封装
    一、查缺补漏 1.ctrl+alt+L规范格式 2.Python使用ini&yaml配置文件 http://testingpai.com/article/1621245437855 3.如何进行SDK的测试 https://www.cnblogs.com/winson-317/p/9896645.html 4.Shift+alt+E执行选中的代码二、配置文件分类三种配置文件效率一致,p......
  • Python实现艾宾浩斯背单词功能
    本项目主要是通过在事先准备好的excel单词文件中每天抽取单词,并反复使用QQ邮箱发送到自己的邮箱里提醒自己有一定规律的背单词,项目最大的难点有三。对于csv文件的对应切片任务等操作对于日志的记录艾宾浩斯记忆法是一个周期性的过程,需要反复的计算。当然,由于这个项目的文件还是......
  • 使用Python实现基于图像的物体识别技术
    摘要:物体识别是计算机视觉技术中的一个核心问题,其应用涵盖了许多领域。本文将介绍如何使用Python编写一个简单的基于图像的物体识别程序,并且通过实际案例展示其应用。关键词:Python,物体识别,计算机视觉,OpenCV一、需求分析在使用Python实现物体识别技术之前,我们需要了解应用的具体需求......
  • 使用Python实现Ubuntu搜狗输入法的安装
    Ubuntu搜狗输入法在每次安装后都需要重新配置,非常繁琐。我们可以使用Python的subprocess模块来实现。以下是示例代码,它使用了subprocess模块中的check_call()函数来执行安装命令:importsubprocesssubprocess.check_call(['sudo','add-apt-repository','-y','ppa:fcitx-team/nig......
  • Python基础
    预计更新一、爬虫技术概述1.1什么是爬虫技术1.2爬虫技术的应用领域1.3爬虫技术的工作原理二、网络协议和HTTP协议2.1网络协议概述2.2HTTP协议介绍2.3HTTP请求和响应三、Python基础3.1Python语言概述3.2Python的基本数据类型3.3Python的流程控制语句3.4Python的函数和......
  • 【Python&Hypermesh】ABAQUS导入网格,并在Part内保留SET
    在Hypermesh定义好set,划分好网格以后,可以导出为INP。然后在ABAQUS导入inp,就可以得到网格。但是这样倒进来的网格一般有两个问题:网格全在一个部件里,原来定义好的Set会出现在装配级别下,而不是Part级别,这在某些情况还是比较麻烦的Hypermesh中的component并不和ABAQUS的Part相对应......
  • Python flask-sqlalchemy
    安装pip3installmysql-connector-pythonpipinstallflask_sqlalchemy /setting.pyclassConfigs:#数据库信息MYSQL_USER=''MYSQL_PWD=''MYSQL_HOST=''MYSQL_PORT=''DBNAME=''......