跳到主要内容

页面

页面

每个 BrowserContext 可以拥有多个页面。Page 指的是浏览器上下文中的单个标签页或弹窗。它用于跳转到指定的 URL 并与页面内容进行交互。

page = context.new_page()

# 显式跳转页面,类似于在浏览器中输入 URL。
page.goto('http://example.com')
# 填充输入框。
page.locator('#search').fill('query')

# 通过点击链接隐式跳转页面。
page.locator('#submit').click()
# 期望跳转到新的 url。
print(page.url)

多页面

每个浏览器上下文可以包含多个页面(标签页)。

  • 每个页面都表现为聚焦的活动页面,无需将页面置于前台。
  • 上下文中的页面会继承上下文级别的模拟设置,如视口大小、自定义网络路由或浏览器语言环境。
# 创建两个页面
page_one = context.new_page()
page_two = context.new_page()

# 获取浏览器上下文中的所有页面
all_pages = context.pages

处理新页面

可以通过浏览器上下文的 page 事件获取在该上下文中新创建的页面。这通常用于处理由 target="_blank" 链接打开的新页面。

# 在特定操作后获取新页面(例如点击链接)
with context.expect_page() as new_page_info:
page.get_by_text("open new tab").click() # 打开新标签页
new_page = new_page_info.value

# 正常与新页面交互
new_page.get_by_role("button").click()
print(new_page.title())

如果触发新页面的操作未知,可以使用如下模式。

# 获取上下文中所有新页面(包括弹窗)
def handle_page(page):
page.wait_for_load_state()
print(page.title())

context.on("page", handle_page)

处理弹窗

如果页面打开了一个弹窗(例如通过 target="_blank" 链接打开的页面),可以通过监听页面的 popup 事件获取弹窗的引用。

该事件除了会在 browserContext.on('page') 上触发外,还会在与当前页面相关的弹窗上单独触发。

# 在特定操作后获取弹窗(例如点击)
with page.expect_popup() as popup_info:
page.get_by_text("open the popup").click()
popup = popup_info.value

# 正常与弹窗交互
popup.get_by_role("button").click()
print(popup.title())

如果触发弹窗的操作未知,可以使用如下模式。

# 打开弹窗时获取所有弹窗
def handle_popup(popup):
popup.wait_for_load_state()
print(popup.title())

page.on("popup", handle_popup)