Playwright Python — справочникНа главный сайт

Что такое Page?

Page — это отдельная вкладка браузера. Вся работа с элементами, навигацией и событиями происходит через объект Page. Страница всегда принадлежит конкретному BrowserContext.

Создание страницы

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    context = browser.new_context()

    # Через контекст
    page = context.new_page()

    # Напрямую от браузера (создаётся новый контекст)
    page2 = browser.new_page()

Основные методы навигации

page.goto("https://example.com")
html = page.content()           # весь HTML страницы
title = page.title()            # заголовок страницы
url = page.url()                # текущий URL

Работа с контентом

Метод page.set_content() позволяет установить HTML напрямую:

page.set_content("<h1>Привет, мир!</h1><p>Это тест</p>")
print(page.textContent("h1"))  # "Привет, мир!"

Поиск элементов и локаторы

locator = page.locator(".my-class")
button = page.get_by_role("button", name="Отправить")
frame = page.frame_locator("iframe#content")

Выполнение JavaScript

result = page.evaluate("() => document.title")
print(result)

handle = page.evaluate_handle("() => window")

Popup-окна

При клике, открывающем новое окно, используйте expect_popup():

with page.expect_popup() as popup_info:
    page.get_by_text("Открыть в новом окне").click()

new_page = popup_info.value
new_page.wait_for_load_state()
print(new_page.title())

Событие popup через page.on

def on_popup(popup):
    popup.wait_for_load_state()
    print(f"Popup URL: {popup.url}")

page.on("popup", on_popup)

Ожидание новой страницы в контексте

with context.expect_page() as page_info:
    # действие, которое открывает новую вкладку
    page.click("a[target=_blank]")

new_page = page_info.value

Переключение между вкладками

# Перевести фокус на вкладку
page.bring_to_front()

# Список всех страниц в контексте
for p in context.pages:
    print(p.title())

Закрытие страницы

page.close()

Автозакрытие модалок (locator handler)

page.add_locator_handler() автоматически закрывает всплывающие окна или модальные диалоги при их появлении:

# Автоматически закрывать cookie-баннер
page.add_locator_handler(
    page.get_by_role("button", name="Принять"),
    handler=lambda btn: btn.click()
)

Multi-page сценарии

def test_multi_page():
    with sync_playwright() as pw:
        browser = pw.chromium.launch()
        page1 = browser.new_page()
        page2 = browser.new_page()

        page1.goto("https://example.com")
        page2.goto("https://playwright.dev")

        print(page1.title())
        print(page2.title())

        page1.close()
        page2.close()

page.pause() — пауза для отладки

Открывает инспектор Playwright для пошаговой отладки:

page.pause()

page.opener()

Возвращает страницу, которая открыла текущую (если она была открыта как popup):

with page.expect_popup() as popup_info:
    page.click("#open")

popup = popup_info.value
opener = popup.opener()
assert opener is page

Полный пример

from playwright.sync_api import sync_playwright

def main():
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)
        page = browser.new_page()
        page.goto("https://example.com")
        page.fill("#search", "Playwright")
        page.get_by_role("button", name="Поиск").click()
        page.wait_for_load_state("networkidle")
        print(f"Результаты: {page.title()}")
        page.close()
        browser.close()

main()