Как работать с несколькими вкладками в Playwright: переключения и параллельные действия

Кратко: Научитесь управлять несколькими вкладками в Playwright: открывать, переключаться, выполнять параллельные действия и обрабатывать popup — всё с примерами и ожиданиями.
playwright несколько вкладок python

Когда мне понадобилось автоматизировать задачи с использованием одновременно нескольких страниц — например, искать товар на одном сайте и сравнивать цену на другом — столкнулся с вопросом: «Как управлять несколькими вкладками в одном браузере?»

Оказалось, Playwright делает это проще и надёжнее, чем Selenium. В этой статье вы узнаете, как реализовать playwright работа с вкладками на практике:

  • Открывать новые вкладки
  • Переключаться между ними
  • Ждать загрузку каждой
  • Сравнивать данные между вкладками
  • Обрабатывать popup-окна (например, при window.open())

Всё — на реальных сайтах, с полным кодом и пояснениями.

Почему важно работать с вкладками, а не с несколькими браузерами?

Если вы запустите два browser.new_page() в разных контекстах — сессия (куки, localStorage) не будет общей.
Но если вы открываете вкладки в одном контексте — всё работает как в настоящем браузере: единая сессия, общие куки, плавное взаимодействие.

👉 Именно один контекст + несколько страниц — правильный путь.

Подготовка: демо-сайты для практики

Будем использовать:

Шаг 1. Открытие новой вкладки через context.new_page()

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    context = browser.new_context()
    
    # Первая вкладка
    page1 = context.new_page()
    page1.goto("https://example.com")
    
    # Вторая вкладка
    page2 = context.new_page()
    page2.goto("https://httpbin.org")
    
    print("Заголовки:")
    print("Вкладка 1:", page1.title())
    print("Вкладка 2:", page2.title())
    
    context.close()
    browser.close()

✅ Каждый page — независимый объект, но в одной сессии.

Шаг 2. Переключение между вкладками и параллельные действия

Вы не переключаетесь активно — вы просто работаете с нужным объектом page.

Пример: скопировать заголовок из вкладки 1 и вставить в форму во вкладке 2.

# Получаем заголовок с example.com
title = page1.text_content("h1")

# Ищем форму на httpbin.org (создадим тестовую)
page2.goto("https://httpbin.org/forms/post")
page2.fill("input[name='custname']", title)
page2.click("input[type='submit']")

💡 Нет «активной вкладки» — вы управляете программно.

Шаг 3. Обработка popup-окон (window.open)

Некоторые сайты открывают вкладки через JS. Playwright умеет их ловить.

Пример с demoqa.com

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    page.goto("https://demoqa.com/browser-windows")
    
    # Ждём появления новой страницы при клике
    with page.expect_popup() as popup_info:
        page.click("#tabButton")  # или "#windowButton"
    
    new_page = popup_info.value
    new_page.wait_for_load_state("networkidle")
    
    print("Текст во вкладке:", new_page.text_content("body"))
    
    context.close()

📚 Документация: Page.expect_popup()

Шаг 4. Ожидание загрузки в каждой вкладке

Всегда используйте wait_for_load_state():

page1.goto("https://example.com")
page1.wait_for_load_state("networkidle")  # ждём, пока не прекратятся запросы

page2.goto("https://httpbin.org/get")
page2.wait_for_load_state("domcontentloaded")  # или "load"

Это критически важно для стабильности.

Советы для продвинутого использования

  • Не используйте page.click() с target="_blank" без expect_popup() — вкладка может открыться, но не будет перехвачена
  • Закрывайте неиспользуемые вкладки: page.close()
  • Для сравнения данных — собирайте всё в один словарь:
results = {
    "example": page1.text_content("h1"),
    "httpbin": page2.text_content("pre")
}

Заключение

Теперь вы умеете:

✅ Открывать несколько вкладок в одном контексте
✅ Работать с каждой независимо
✅ Обрабатывать popup и window.open()
✅ Ждать загрузку и извлекать данные

Это особенно полезно для:

  • Сравнения цен
  • Тестирования межстраничных сценариев
  • Автоматизации задач, требующих данных с нескольких источников

🐍 Playwright делает управление вкладками простым — без хаков и костылей.

🔁 Если вы используете Playwright для автоматизации, посмотрите также:
python playwright заполнить форму — работа с input, кнопками и ожиданиями
playwright proxy python — смена IP и User-Agent для защиты от блокировок
python playwright автологин — вход на сайт и сохранение сессии через cookies
💬 Остались вопросы? Пишите в комментариях — с радостью уточню, дополню или помогу с вашим кодом.
📢 Подписывайтесь на Telegram-канал PythonAuto, чтобы не пропустить новые гайды по автоматизации, парсингу и Python.
👉 Ваш интерес — лучшая мотивация для новых статей!

Оставьте комментарий