frame切换
frame的切换使用使用两个方法
page.frame() | 支持name或url属性定位 |
page.frame_locator() | 定位器定位 |
常用的还是page.frame_locator(),也是演示推荐使用的方法,如图下元素:
# 定位器会返回frame对象
frame = page.frame_locator('iframe[src]')
# 使用frame对象进行定位操作
frame.locator() #
注意跟selenium不同的是,selenium定位都是基于driver对象,而palywright切换frame后则是基于返回的frame对象,否则无法定位到,如果frame下还有嵌套frame,则继续通过frame定位下层frame。
页面切换
每个page对象就是一个页面,可以通过context实现新建空白页,获取所有page,实现page页面操作对象切换,如果不明白context和page的关系,可以回到playwright学习笔记-安装使用,了解他们之间的关系。
代码示例如下:
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
context = browser.new_context()
page1 = context.new_page()
page1.goto('https://www.baidu.com/')
# 获取百度的标题
print('第一个页面标题:', page1.title())
# 新增页面
page2 = context.new_page()
page2.goto('https://www.taobao.com/')
print('第二个页面标题:', page2.title())
# 通过获取所有页面列表
page3 = context.pages[1]
print('新页面标题:', page3.title())
多浏览器切换
多浏览器使用的场景,适合需要登录多个用户,交互操作进行的场景,通过browser对象创建context,再新增一个page对象
代码示例:
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto('https://www.baidu.com/')
# 第一个浏览器
print('第一个浏览器:', page.title())
new_context = browser.new_context()
# 第二个浏览器
new_page = new_context.new_page()
new_page.goto('https://www.taobao.com/')
print('第二个浏览器:', new_page.title())