頁面
頁面
每個 BrowserContext 可以有多個頁面。 Page 指的是瀏覽器上下文中的單個分頁或彈出視窗。它應該用於導航到 URL 並與頁面內容進行互動。
- Sync
- Async
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)
page = await context.new_page()
# Navigate explicitly, similar to entering a URL in the browser.
await page.goto('http://example.com')
# Fill an input.
await page.locator('#search').fill('query')
# Navigate implicitly by clicking a link.
await page.locator('#submit').click()
# Expect a new url.
print(page.url)
多個頁面
每個瀏覽器上下文可以承載多個頁面 (標籤)。
- 每個頁面都像一個專注的、活躍的頁面。不需要將頁面帶到前面。
- 上下文內的頁面遵循上下文級別的模擬,例如視窗大小、自訂網路路徑或瀏覽器語言環境。
- Sync
- Async
# create two pages
page_one = context.new_page()
page_two = context.new_page()
# get pages of a browser context
all_pages = context.pages
# create two pages
page_one = await context.new_page()
page_two = await context.new_page()
# get pages of a browser context
all_pages = context.pages
處理新頁面
page
事件在瀏覽器上下文中可以用來獲取在該上下文中建立的新頁面。這可以用來處理由 target="_blank"
連結打開的新頁面。
- Sync
- Async
# 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 page after a specific action (e.g. clicking a link)
async with context.expect_page() as new_page_info:
await page.get_by_text("open new tab").click() # Opens a new tab
new_page = await new_page_info.value
# Interact with the new page normally
await new_page.get_by_role("button").click()
print(await new_page.title())
如果觸發新頁面的動作未知,可以使用以下模式。
- Sync
- Async
# 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)
# Get all new pages (including popups) in the context
async def handle_page(page):
await page.wait_for_load_state()
print(await page.title())
context.on("page", handle_page)
處理彈出視窗
如果頁面打開了一個彈出視窗(例如由 target="_blank"
連結打開的頁面),你可以通過監聽頁面的 popup
事件來獲取對它的引用。
此事件除了 browserContext.on('page')
事件外,還會針對與此頁面相關的彈出視窗發出。
- Sync
- Async
# 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 popup after a specific action (e.g., click)
async with page.expect_popup() as popup_info:
await page.get_by_text("open the popup").click()
popup = await popup_info.value
# Interact with the popup normally
await popup.get_by_role("button").click()
print(await popup.title())
如果觸發彈出視窗的動作未知,可以使用以下模式。
- Sync
- Async
# Get all popups when they open
def handle_popup(popup):
popup.wait_for_load_state()
print(popup.title())
page.on("popup", handle_popup)
# Get all popups when they open
async def handle_popup(popup):
await popup.wait_for_load_state()
print(await popup.title())
page.on("popup", handle_popup)