Skip to main content

頁面

頁面

每個 BrowserContext 可以有多個頁面。 Page 指的是瀏覽器上下文中的單個分頁或彈出視窗。它應該用於導航到 URL 並與頁面內容進行互動。

page = context.new_page()

# Navigate explicitly, similar to entering a URL in the browser.
page.goto('http://example.com')
# Fill an input.
page.locator('#search').fill('query')

# Navigate implicitly by clicking a link.
page.locator('#submit').click()
# Expect a new url.
print(page.url)

多個頁面

每個瀏覽器上下文可以承載多個頁面 (標籤)。

  • 每個頁面都像一個專注的、活躍的頁面。不需要將頁面帶到前面。
  • 上下文內的頁面遵循上下文級別的模擬,例如視窗大小、自訂網路路徑或瀏覽器語言環境。
# create two pages
page_one = context.new_page()
page_two = context.new_page()

# get pages of a browser context
all_pages = context.pages

處理新頁面

page 事件在瀏覽器上下文中可以用來獲取在該上下文中建立的新頁面。這可以用來處理由 target="_blank" 連結打開的新頁面。

# Get page after a specific action (e.g. clicking a link)
with context.expect_page() as new_page_info:
page.get_by_text("open new tab").click() # Opens a new tab
new_page = new_page_info.value

# Interact with the new page normally
new_page.get_by_role("button").click()
print(new_page.title())

如果觸發新頁面的動作未知,可以使用以下模式。

# Get all new pages (including popups) in the context
def handle_page(page):
page.wait_for_load_state()
print(page.title())

context.on("page", handle_page)

處理彈出視窗

如果頁面打開了一個彈出視窗(例如由 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.value

# Interact with the popup normally
popup.get_by_role("button").click()
print(popup.title())

如果觸發彈出視窗的動作未知,可以使用以下模式。

# Get all popups when they open
def handle_popup(popup):
popup.wait_for_load_state()
print(popup.title())

page.on("popup", handle_popup)