browser.new_context() 创建一个新的浏览器上下文。它不会与其他浏览器上下文共享 cookies/缓存。
context之间是相互隔离的,可以理解为轻量级的浏览器实例
多浏览器窗口
创建一个context相当于打开一个新的浏览器窗口
如下代码打开两个浏览器窗口:
from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch(headless=False, slow_mo=1000)context1 = browser.new_context() # 创建上下文,浏览器实例1context2 = browser.new_context() # 创建上下文,浏览器实例2page1 = context1.new_page() # 打开标签页1page1.goto("https://www.baidu.com/")# 操作第二个浏览器窗口page2 = context2.new_page() # 打开标签页1page2.goto("https://www.baidu.com/")
创建一个page页面相当于打开一个新的标签页
多标签页
每个浏览器上下文可以承载多个页面(选项卡)。
-
每个页面都像一个聚焦的活动页面。
不需要将页面置于最前面。
如下代码打开两个tab标签页
from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch(headless=False, slow_mo=1000)context = browser.new_context() # 创建上下文,浏览器实例page = context.new_page() # 打开标签页1page.goto("https://www.baidu.com/")page2 = context.new_page() # 打开标签页2page2.goto("https://www.sina.com/")context.close()browser.close()
浏览器上下文还可用于模拟涉及移动设备、权限、区域设置和配色方案的多页面场景
Playwright 可以在一个场景中创建多个浏览器上下文。当您想测试多用户功能(如聊天)时,这很有用。
python+playwright 学习-5.new_context上下文与新窗口操作
新标签页
浏览器上下文中的事件page可用于获取在上下文中创建的新页面。这可用于处理通过target=”_blank”链接打开的新页面。
from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch(headless=False, slow_mo=1000)context = browser.new_context() # 创建上下文,浏览器实例page = context.new_page() # 打开标签页page.goto("https://www.baidu.com/")print(page.title())# Get page after a specific action (e.g. clicking a link)with context.expect_page() as new_page_info:page.click('text=新闻') # Opens a new tabnew_page = new_page_info.valuenew_page.wait_for_load_state() # 等待页面加载到指定状态print(new_page.title())
处理弹出窗口
如果页面打开一个弹出窗口(例如通过链接打开的页面),您可以通过监听页面上的事件target=”_blank”来获取对它的引用。popup
除了browserContext.on(‘page’)事件之外还会发出此事件,但仅针对与此页面相关的弹出窗口。
# Get popup after a specific action (e.g., click)
with page.expect_popup() as popup_info:page.get_by_text("open the popup").click()
popup = popup_info.valuepopup.wait_for_load_state()
print(popup.title())