
Когда мне понадобилось автоматизировать задачи с использованием одновременно нескольких страниц — например, искать товар на одном сайте и сравнивать цену на другом — столкнулся с вопросом: «Как управлять несколькими вкладками в одном браузере?»
Оказалось, Playwright делает это проще и надёжнее, чем Selenium. В этой статье вы узнаете, как реализовать playwright работа с вкладками на практике:
- Открывать новые вкладки
- Переключаться между ними
- Ждать загрузку каждой
- Сравнивать данные между вкладками
- Обрабатывать popup-окна (например, при
window.open())
Всё — на реальных сайтах, с полным кодом и пояснениями.
Оглавление
Почему важно работать с вкладками, а не с несколькими браузерами?
Если вы запустите два browser.new_page() в разных контекстах — сессия (куки, localStorage) не будет общей.
Но если вы открываете вкладки в одном контексте — всё работает как в настоящем браузере: единая сессия, общие куки, плавное взаимодействие.
👉 Именно один контекст + несколько страниц — правильный путь.
Подготовка: демо-сайты для практики
Будем использовать:
- https://demoqa.com/browser-windows— для popup и новых вкладок
- https://example.com и https://httpbin.org — для сравнения данных
Шаг 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 делает управление вкладками простым — без хаков и костылей.
• python playwright заполнить форму — работа с input, кнопками и ожиданиями
• playwright proxy python — смена IP и User-Agent для защиты от блокировок
• python playwright автологин — вход на сайт и сохранение сессии через cookies
📢 Подписывайтесь на Telegram-канал PythonAuto, чтобы не пропустить новые гайды по автоматизации, парсингу и Python.
👉 Ваш интерес — лучшая мотивация для новых статей!