Страницы
Страницы
Каждый BrowserContext может содержать несколько страниц. Page относится к одной вкладке или всплывающему окну в контексте браузера. Он должен использоваться для навигации по URL-адресам и взаимодействия с содержимым страницы.
- Sync
- Async
page = context.new_page()
# Явная навигация, аналогично вводу URL в браузере.
page.goto('http://example.com')
# Заполнение поля ввода.
page.locator('#search').fill('query')
# Неявная навигация путем нажатия на ссылку.
page.locator('#submit').click()
# Ожидание нового URL.
print(page.url)
page = await context.new_page()
# Явная навигация, аналогично вводу URL в браузере.
await page.goto('http://example.com')
# Заполнение поля ввода.
await page.locator('#search').fill('query')
# Неявная навигация путем нажатия на ссылку.
await page.locator('#submit').click()
# Ожидание нового URL.
print(page.url)
Несколько страниц
Каждый контекст браузера может содержать несколько страниц (вкладок).
- Каждая страница ведет себя как активная страница. Перемещение страницы на передний план не требуется.
- Страницы в контексте учитывают эмуляцию на уровне контекста, такую как размеры окна просмотра, пользовательские сетевые маршруты или локаль браузера.
- Sync
- Async
# создание двух страниц
page_one = context.new_page()
page_two = context.new_page()
# получение страниц контекста браузера
all_pages = context.pages
# создание двух страниц
page_one = await context.new_page()
page_two = await context.new_page()
# получение страниц контекста браузера
all_pages = context.pages
Обработка новых страниц
Событие page
в контексте браузера может использоваться для получения новых страниц, созданных в контексте. Это может быть использовано для обработки новых страниц, открытых ссылками с target="_blank"
.
- Sync
- Async
# Получение страницы после определенного действия (например, нажатия на ссылку)
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())
# Получение страницы после определенного действия (например, нажатия на ссылку)
async with context.expect_page() as new_page_info:
await page.get_by_text("open new tab").click() # Открывает новую вкладку
new_page = await new_page_info.value
# Обычное взаимодействие с новой страницей
await new_page.get_by_role("button").click()
print(await new_page.title())
Если действие, которое вызывает новую страницу, неизвестно, можно использовать следующий шаблон.
- Sync
- Async
# Получение всех новых страниц (включая всплывающие окна) в контексте
def handle_page(page):
page.wait_for_load_state()
print(page.title())
context.on("page", handle_page)
# Получение всех новых страниц (включая всплывающие окна) в контексте
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
# Получение всплывающего окна после определенного действия (например, нажатия)
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())
# Получение всплывающего окна после определенного действия (например, нажатия)
async with page.expect_popup() as popup_info:
await page.get_by_text("open the popup").click()
popup = await popup_info.value
# Обычное взаимодействие со всплывающим окном
await popup.get_by_role("button").click()
print(await popup.title())
Если действие, которое вызывает всплывающее окно, неизвестно, можно использовать следующий шаблон.
- Sync
- Async
# Получение всех всплывающих окон при их открытии
def handle_popup(popup):
popup.wait_for_load_state()
print(popup.title())
page.on("popup", handle_popup)
# Получение всех всплывающих окон при их открытии
async def handle_popup(popup):
await popup.wait_for_load_state()
print(await popup.title())
page.on("popup", handle_popup)