BrowserContext
BrowserContexts предоставляют способ работать с несколькими независимыми сессиями браузера.
Если страница открывает другую страницу, например вызовом window.open, попап будет принадлежать контексту браузера родительской страницы.
Playwright позволяет создавать изолированные непостоянные контексты браузера с помощью метода browser.new_context(). Непостоянные контексты браузера не записывают никаких данных о просмотре на диск.
- Sync
- Async
# create a new incognito browser context
context = browser.new_context()
# create a new page inside context.
page = context.new_page()
page.goto("https://example.com")
# dispose context once it is no longer needed.
context.close()
# create a new incognito browser context
context = await browser.new_context()
# create a new page inside context.
page = await context.new_page()
await page.goto("https://example.com")
# dispose context once it is no longer needed.
await context.close()
Методы
add_cookies
Добавлено до v1.9Добавляет cookies в этот контекст браузера. Все страницы в этом контексте будут иметь эти cookies. Cookies можно получить через browser_context.cookies().
Использование
- Sync
- Async
browser_context.add_cookies([cookie_object1, cookie_object2])
await browser_context.add_cookies([cookie_object1, cookie_object2])
Аргументы
cookiesList[Dict]#-
namestr -
valuestr -
urlstr (опционально)Требуется либо
url, либо одновременноdomainиpath. Необязательно. -
domainstr (опционально)Чтобы cookie применялась ко всем поддоменам, добавьте к домену ведущую точку, например: ".example.com". Требуется либо
url, либо одновременноdomainиpath. Необязательно. -
pathstr (опционально)Требуется либо
url, либо одновременноdomainиpath. Необязательно. -
expiresfloat (опционально)Unix time в секундах. Необязательно.
-
httpOnlybool (опционально)Необязательно.
-
securebool (опционально)Необязательно.
-
sameSite"Strict" | "Lax" | "None" (опционально)Необязательно.
-
partitionKeystr (опционально)Для разделённых сторонних cookies (также известных как CHIPS) — ключ разделения (partition key). Необязательно.
-
Возвращает
add_init_script
Добавлено до v1.9Добавляет скрипт, который будет выполнен в одном из следующих сценариев:
- Каждый раз, когда страница создаётся в контексте браузера или выполняет навигацию.
- Каждый раз, когда дочерний фрейм присоединяется или выполняет навигацию на любой странице в контексте браузера. В этом случае скрипт выполняется в контексте только что присоединённого фрейма.
Скрипт выполняется после создания документа, но до запуска любых его скриптов. Это полезно для изменения среды JavaScript, например, чтобы инициализировать Math.random.
Использование
Пример переопределения Math.random до загрузки страницы:
// preload.js
Math.random = () => 42;
- Sync
- Async
# in your playwright script, assuming the preload.js file is in same directory.
browser_context.add_init_script(path="preload.js")
# in your playwright script, assuming the preload.js file is in same directory.
await browser_context.add_init_script(path="preload.js")
Порядок выполнения нескольких скриптов, установленных через browser_context.add_init_script() и page.add_init_script(), не определён.
Аргументы
-
pathUnion[str, pathlib.Path] (опционально)#Путь к JavaScript-файлу. Если
path— относительный путь, то он вычисляется относительно текущего рабочего каталога. Необязательно. -
Скрипт, который будет выполнен на всех страницах в контексте браузера. Необязательно.
Возвращает
clear_cookies
Добавлено до v1.9Удаляет cookies из контекста. Принимает необязательный фильтр.
Использование
- Sync
- Async
context.clear_cookies()
context.clear_cookies(name="session-id")
context.clear_cookies(domain="my-origin.com")
context.clear_cookies(path="/api/v1")
context.clear_cookies(name="session-id", domain="my-origin.com")
await context.clear_cookies()
await context.clear_cookies(name="session-id")
await context.clear_cookies(domain="my-origin.com")
await context.clear_cookies(path="/api/v1")
await context.clear_cookies(name="session-id", domain="my-origin.com")
Аргументы
-
domainstr | Pattern (опционально) Добавлено в: v1.43#Удаляет только cookies с указанным доменом.
-
namestr | Pattern (опционально) Добавлено в: v1.43#Удаляет только cookies с указанным именем.
-
pathstr | Pattern (опционально) Добавлено в: v1.43#Удаляет только cookies с указанным путём.
Возвращает
clear_permissions
Добавлено до v1.9Очищает все переопределения разрешений для контекста браузера.
Использование
- Sync
- Async
context = browser.new_context()
context.grant_permissions(["clipboard-read"])
# do stuff ..
context.clear_permissions()
context = await browser.new_context()
await context.grant_permissions(["clipboard-read"])
# do stuff ..
context.clear_permissions()
Возвращает
close
Добавлено до v1.9Закрывает контекст браузера. Все страницы, относящиеся к этому контексту, будут закрыты.
Контекст браузера по умолчанию нельзя закрыть.
Использование
browser_context.close()
browser_context.close(**kwargs)
Аргументы
-
reasonstr (опционально) Добавлено в: v1.40#Причина, которая будет передана операциям, прерванным закрытием контекста.
Возвращает
cookies
Добавлено до v1.9Если URL не указаны, этот метод возвращает все cookies. Если URL указаны, возвращаются только cookies, влияющие на эти URL.
Использование
browser_context.cookies()
browser_context.cookies(**kwargs)
Аргументы
Возвращает
expect_console_message
Добавлено в: v1.34Выполняет действие и ожидает, пока в страницах контекста будет зарегистрирован ConsoleMessage. Если передан predicate, он передаёт значение ConsoleMessage в функцию predicate и ждёт, пока predicate(message) вернёт истинное значение. Выбросит ошибку, если страница будет закрыта до срабатывания события browser_context.on("console").
Использование
browser_context.expect_console_message()
browser_context.expect_console_message(**kwargs)
Аргументы
-
predicateCallable[ConsoleMessage]:bool (опционально)#Получает объект ConsoleMessage и возвращает truthy-значение, когда ожидание должно завершиться.
-
Максимальное время ожидания в миллисекундах. Значение по умолчанию —
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью browser_context.set_default_timeout().
Возвращает
expect_event
Добавлено до v1.9Ожидает срабатывания события и передаёт его значение в функцию predicate. Возвращается, когда predicate возвращает истинное значение. Выбросит ошибку, если контекст будет закрыт до срабатывания события. Возвращает значение данных события.
Использование
- Sync
- Async
with context.expect_event("page") as event_info:
page.get_by_role("button").click()
page = event_info.value
async with context.expect_event("page") as event_info:
await page.get_by_role("button").click()
page = await event_info.value
Аргументы
-
Имя события, такое же, какое передаётся в
browserContext.on(event). -
predicateCallable (опционально)#Получает данные события и разрешается в истинное значение, когда ожидание должно завершиться.
-
Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью browser_context.set_default_timeout().
Возвращает
expect_page
Добавлено в: v1.9Выполняет действие и ожидает создания новой Page в контексте. Если предоставлен предикат, он передает значение Page в функцию predicate и ожидает, пока predicate(event) не вернет истинное значение. Выдаст ошибку, если контекст закроется до создания новой Page.
Использование
browser_context.expect_page()
browser_context.expect_page(**kwargs)
Аргументы
-
predicateCallable[Page]:bool (опционально)#Получает объект Page и разрешает в истинное значение, когда ожидание должно разрешиться.
-
Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя browser_context.set_default_timeout().
Возвращает
expose_binding
Добавлено до v1.9Метод добавляет функцию с именем name в объект window каждого фрейма на каждой странице в контексте. При вызове функция выполняет callback и возвращает Promise, который разрешается в возвращаемое значение callback. Если callback возвращает Promise, он будет ожидаться.
Первый аргумент функции callback содержит информацию о вызывающем: { browserContext: BrowserContext, page: Page, frame: Frame }.
Смотрите page.expose_binding() для версии только для страницы.
Использование
Пример предоставления URL страницы всем фреймам на всех страницах в контексте:
- Sync
- Async
from playwright.sync_api import sync_playwright, Playwright
def run(playwright: Playwright):
webkit = playwright.webkit
browser = webkit.launch(headless=False)
context = browser.new_context()
context.expose_binding("pageURL", lambda source: source["page"].url)
page = context.new_page()
page.set_content("""
<script>
async function onClick() {
document.querySelector('div').textContent = await window.pageURL();
}
</script>
<button onclick="onClick()">Click me</button>
<div></div>
""")
page.get_by_role("button").click()
with sync_playwright() as playwright:
run(playwright)
import asyncio
from playwright.async_api import async_playwright, Playwright
async def run(playwright: Playwright):
webkit = playwright.webkit
browser = await webkit.launch(headless=False)
context = await browser.new_context()
await context.expose_binding("pageURL", lambda source: source["page"].url)
page = await context.new_page()
await page.set_content("""
<script>
async function onClick() {
document.querySelector('div').textContent = await window.pageURL();
}
</script>
<button onclick="onClick()">Click me</button>
<div></div>
""")
await page.get_by_role("button").click()
async def main():
async with async_playwright() as playwright:
await run(playwright)
asyncio.run(main())
Аргументы
-
Имя функции в объекте window.
-
Функция обратного вызова, которая будет вызвана в контексте Playwright.
-
Устарело
Эта опция будет удалена в будущем.
Передавать ли аргумент как handle, вместо передачи по значению. При передаче handle поддерживается только один аргумент. При передаче по значению поддерживается несколько аргументов.
Возвращает
expose_function
Добавлено до v1.9Метод добавляет функцию с именем name в объект window каждого фрейма на каждой странице в контексте. При вызове функция выполняет callback и возвращает Promise, который разрешается в возвращаемое значение callback.
Если callback возвращает Promise, он будет ожидаться.
Смотрите page.expose_function() для версии только для страницы.
Использование
Пример добавления функции sha256 на все страницы в контексте:
- Sync
- Async
import hashlib
from playwright.sync_api import sync_playwright
def sha256(text: str) -> str:
m = hashlib.sha256()
m.update(bytes(text, "utf8"))
return m.hexdigest()
def run(playwright: Playwright):
webkit = playwright.webkit
browser = webkit.launch(headless=False)
context = browser.new_context()
context.expose_function("sha256", sha256)
page = context.new_page()
page.set_content("""
<script>
async function onClick() {
document.querySelector('div').textContent = await window.sha256('PLAYWRIGHT');
}
</script>
<button onclick="onClick()">Click me</button>
<div></div>
""")
page.get_by_role("button").click()
with sync_playwright() as playwright:
run(playwright)
import asyncio
import hashlib
from playwright.async_api import async_playwright, Playwright
def sha256(text: str) -> str:
m = hashlib.sha256()
m.update(bytes(text, "utf8"))
return m.hexdigest()
async def run(playwright: Playwright):
webkit = playwright.webkit
browser = await webkit.launch(headless=False)
context = await browser.new_context()
await context.expose_function("sha256", sha256)
page = await context.new_page()
await page.set_content("""
<script>
async function onClick() {
document.querySelector('div').textContent = await window.sha256('PLAYWRIGHT');
}
</script>
<button onclick="onClick()">Click me</button>
<div></div>
""")
await page.get_by_role("button").click()
async def main():
async with async_playwright() as playwright:
await run(playwright)
asyncio.run(main())
Аргументы
-
Имя функции в объекте window.
-
Функция обратного вызова, которая будет вызвана в контексте Playwright.
Возвращает
grant_permissions
Добавлено до v1.9Предоставляет указанные разрешения для контекста браузера. Предоставляет соответствующие разрешения только для указанного источника, если он указан.
Использование
browser_context.grant_permissions(permissions)
browser_context.grant_permissions(permissions, **kwargs)
Аргументы
-
Список разрешений для предоставления.
осторожноПоддерживаемые разрешения различаются между браузерами и даже между разными версиями одного и того же браузера. Любое разрешение может перестать работать после обновления.
Вот некоторые разрешения, которые могут поддерживаться некоторыми браузерами:
'accelerometer''ambient-light-sensor''background-sync''camera''clipboard-read''clipboard-write''geolocation''gyroscope''local-fonts''local-network-access''magnetometer''microphone''midi-sysex'(системно-эксклюзивный midi)'midi''notifications''payment-handler''storage-access'
-
[Источник], для которого предоставляются разрешения, например, "https://example.com".
Возвращает
new_cdp_session
Добавлено в: v1.11CDP сессии поддерживаются только в браузерах на основе Chromium.
Возвращает вновь созданную сессию.
Использование
browser_context.new_cdp_session(page)
Аргументы
-
Цель для создания новой сессии. Для обратной совместимости этот параметр называется
page, но он может быть типаPageилиFrame.
Возвращает
new_page
Добавлено до v1.9Создает новую страницу в контексте браузера.
Использование
browser_context.new_page()
Возвращает
route
Добавлено до v1.9Маршрутизация предоставляет возможность изменять сетевые запросы, которые выполняются любой страницей в контексте браузера. Как только маршрут включен, каждый запрос, соответствующий шаблону URL, будет приостановлен, если он не будет продолжен, выполнен или прерван.
browser_context.route() не будет перехватывать запросы, перехваченные Service Worker. См. эту проблему. Мы рекомендуем отключать Service Workers при использовании перехвата запросов, установив service_workers в 'block'.
Использование
Пример наивного обработчика, который прерывает все запросы изображений:
- Sync
- Async
context = browser.new_context()
page = context.new_page()
context.route("**/*.{png,jpg,jpeg}", lambda route: route.abort())
page.goto("https://example.com")
browser.close()
context = await browser.new_context()
page = await context.new_page()
await context.route("**/*.{png,jpg,jpeg}", lambda route: route.abort())
await page.goto("https://example.com")
await browser.close()
или тот же фрагмент кода, используя шаблон регулярного выражения:
- Sync
- Async
context = browser.new_context()
page = context.new_page()
context.route(re.compile(r"(\.png$)|(\.jpg$)"), lambda route: route.abort())
page = await context.new_page()
page = context.new_page()
page.goto("https://example.com")
browser.close()
context = await browser.new_context()
page = await context.new_page()
await context.route(re.compile(r"(\.png$)|(\.jpg$)"), lambda route: route.abort())
page = await context.new_page()
await page.goto("https://example.com")
await browser.close()
Возможно исследовать запрос, чтобы решить, какое действие выполнить с маршрутом. Например, имитировать все запросы, содержащие некоторые данные post, и оставлять все остальные запросы как есть:
- Sync
- Async
def handle_route(route: Route):
if ("my-string" in route.request.post_data):
route.fulfill(body="mocked-data")
else:
route.continue_()
context.route("/api/**", handle_route)
async def handle_route(route: Route):
if ("my-string" in route.request.post_data):
await route.fulfill(body="mocked-data")
else:
await route.continue_()
await context.route("/api/**", handle_route)
Маршруты страницы (установленные с помощью page.route()) имеют приоритет над маршрутами контекста браузера, когда запрос соответствует обоим обработчикам.
Чтобы удалить маршрут с его обработчиком, вы можете использовать browser_context.unroute().
Включение маршрутизации отключает http-кэш.
Аргументы
-
urlstr | Pattern | Callable[URL]:bool#Глоб-шаблон, регулярное выражение или предикат, который получает URL для сопоставления при маршрутизации. Если в опциях контекста задан base_url и переданный URL — строка, не начинающаяся с
*, он будет разрешён с помощью конструктораnew URL(). -
handlerCallable[Route, Request]:Promise[Any] | Any#функция-обработчик для маршрутизации запроса.
-
timesint (опционально) Добавлено в: v1.15#Как часто маршрут должен использоваться. По умолчанию он будет использоваться каждый раз.
Возвращает
route_from_har
Добавлено в: v1.23Если указано, сетевые запросы, сделанные в контексте, будут обслуживаться из HAR файла. Подробнее читайте в разделе Воспроизведение из HAR.
Playwright не будет обслуживать запросы, перехваченные Service Worker, из HAR файла. См. эту проблему. Мы рекомендуем отключать Service Workers при использовании перехвата запросов, установив service_workers в 'block'.
Использование
browser_context.route_from_har(har)
browser_context.route_from_har(har, **kwargs)
Аргументы
-
harUnion[str, pathlib.Path]#Путь к HAR файлу с предварительно записанными сетевыми данными. Если
pathявляется относительным путем, то он разрешается относительно текущей рабочей директории. -
not_found"abort" | "fallback" (опционально)#- Если установлено в 'abort', любой запрос, не найденный в HAR файле, будет прерван.
- Если установлено в 'fallback', переходит к следующему обработчику маршрута в цепочке обработчиков.
По умолчанию прерывается.
-
Если указано, обновляет данный HAR с фактической сетевой информацией вместо обслуживания из файла. Файл записывается на диск, когда вызывается browser_context.close().
-
update_content"embed" | "attach" (опционально) Добавлено в: v1.32#Опциональная настройка для управления содержимым ресурсов. Если указано
attach, ресурсы сохраняются как отдельные файлы или записи в ZIP архиве. Если указаноembed, содержимое сохраняется встраиваемым в HAR файл. -
update_mode"full" | "minimal" (опционально) Добавлено в: v1.32#Когда установлено в
minimal, записывается только информация, необходимая для маршрутизации из HAR. Это исключает размеры, время, страницы, куки, безопасность и другие типы информации HAR, которые не используются при воспроизведении из HAR. По умолчаниюminimal. -
urlstr | Pattern (опционально)#Глобальный шаблон, регулярное выражение или предикат для сопоставления URL запроса. Только запросы с URL, соответствующим шаблону, будут обслуживаться из HAR файла. Если не указано, все запросы обслуживаются из HAR файла.
Возвращает
route_web_socket
Добавлено в: v1.48Этот метод позволяет изменять соединения websocket, которые создаются любой страницей в контексте браузера.
Обратите внимание, что только WebSocket, созданные после вызова этого метода, будут маршрутизироваться. Рекомендуется вызывать этот метод перед созданием любых страниц.
Использование
Ниже приведен пример простого обработчика, который блокирует некоторые сообщения websocket. Подробнее и примеры смотрите в WebSocketRoute.
- Sync
- Async
def message_handler(ws: WebSocketRoute, message: Union[str, bytes]):
if message == "to-be-blocked":
return
ws.send(message)
def handler(ws: WebSocketRoute):
ws.route_send(lambda message: message_handler(ws, message))
ws.connect()
context.route_web_socket("/ws", handler)
def message_handler(ws: WebSocketRoute, message: Union[str, bytes]):
if message == "to-be-blocked":
return
ws.send(message)
async def handler(ws: WebSocketRoute):
ws.route_send(lambda message: message_handler(ws, message))
await ws.connect()
await context.route_web_socket("/ws", handler)
Аргументы
-
urlstr | Pattern | Callable[URL]:bool#Только WebSocket с URL, соответствующим этому шаблону, будут маршрутизироваться. Строковый шаблон может быть относительным к base_url опции контекста.
-
handlerCallable[WebSocketRoute]:Promise[Any] | Any#Функция-обработчик для маршрутизации WebSocket.
Возвращает
set_default_navigation_timeout
Добавлено до v1.9Эта настройка изменит максимальное время навигации по умолчанию для следующих методов и связанных с ними ярлыков:
- page.go_back()
- page.go_forward()
- page.goto()
- page.reload()
- page.set_content()
- page.expect_navigation()
Использование
browser_context.set_default_navigation_timeout(timeout)
Аргументы
set_default_timeout
Добавлено до v1.9Эта настройка изменит максимальное время по умолчанию для всех методов, принимающих опцию timeout.
Использование
browser_context.set_default_timeout(timeout)
Аргументы
set_extra_http_headers
Добавлено до v1.9Дополнительные HTTP заголовки будут отправляться с каждым запросом, инициированным любой страницей в контексте. Эти заголовки объединяются с дополнительными HTTP заголовками, установленными для страницы с помощью page.set_extra_http_headers(). Если страница переопределяет определенный заголовок, будет использоваться значение заголовка, специфичное для страницы, вместо значения заголовка контекста браузера.
browser_context.set_extra_http_headers() не гарантирует порядок заголовков в исходящих запросах.
Использование
browser_context.set_extra_http_headers(headers)
Аргументы
-
Объект, содержащий дополнительные HTTP заголовки, которые будут отправляться с каждым запросом. Все значения заголовков должны быть строками.
Возвращает
set_geolocation
Добавлено до v1.9Устанавливает геолокацию контекста. Передача null или undefined эмулирует недоступность позиции.
Использование
- Sync
- Async
browser_context.set_geolocation({"latitude": 59.95, "longitude": 30.31667})
await browser_context.set_geolocation({"latitude": 59.95, "longitude": 30.31667})
Рассмотрите возможность использования browser_context.grant_permissions() для предоставления разрешений страницам контекста браузера на чтение его геолокации.
Аргументы
Возвращает
set_offline
Добавлено до v1.9Использование
browser_context.set_offline(offline)
Аргументы
Возвращает
storage_state
Добавлено до v1.9Возвращает состояние хранилища для этого контекста браузера, содержит текущие куки, снимок локального хранилища и снимок IndexedDB.
Использование
browser_context.storage_state()
browser_context.storage_state(**kwargs)
Аргументы
-
indexed_dbbool (опционально) Добавлено в: v1.51#Установите
true, чтобы включить IndexedDB в снимок состояния хранилища. Если ваше приложение использует IndexedDB для хранения токенов аутентификации (например, Firebase Authentication), включите это. -
pathUnion[str, pathlib.Path] (опционально)#Путь к файлу для сохранения состояния хранилища. Если path является относительным путем, то он разрешается относительно текущей рабочей директории. Если путь не указан, состояние хранилища все равно возвращается, но не будет сохранено на диск.
Возвращает
unroute
Добавлено до v1.9Удаляет маршрут, созданный с помощью browser_context.route(). Когда handler не указан, удаляет все маршруты для url.
Использование
browser_context.unroute(url)
browser_context.unroute(url, **kwargs)
Аргументы
-
urlstr | Pattern | Callable[URL]:bool#Глобальный шаблон, шаблон регулярного выражения или предикат, получающий URL, использованный для регистрации маршрутизации с browser_context.route().
-
handlerCallable[Route, Request]:Promise[Any] | Any (опционально)#Опциональная функция-обработчик, использованная для регистрации маршрутизации с browser_context.route().
Возвращает
unroute_all
Добавлено в: v1.41Удаляет все маршруты, созданные с помощью browser_context.route() и browser_context.route_from_har().
Использование
browser_context.unroute_all()
browser_context.unroute_all(**kwargs)
Аргументы
-
behavior"wait" | "ignoreErrors" | "default" (опционально)#Указывает, следует ли ждать уже выполняющихся обработчиков и что делать, если они вызывают ошибки:
'default'- не ждать завершения текущих вызовов обработчиков (если есть), если удаленный обработчик вызывает ошибку, это может привести к необработанной ошибке'wait'- ждать завершения текущих вызовов обработчиков (если есть)'ignoreErrors'- не ждать завершения текущих вызовов обработчиков (если есть), все ошибки, вызванные обработчиками после удаления маршрутизации, тихо перехватываются
Возвращает
wait_for_event
Добавлено до v1.9В большинстве случаев следует использовать browser_context.expect_event().
Ожидает, пока указанный event не будет вызван. Если предикат предоставлен, он передает значение события в функцию predicate и ждет, пока predicate(event) не вернет истинное значение. Выдаст ошибку, если контекст браузера будет закрыт до того, как event будет вызван.
Использование
browser_context.wait_for_event(event)
browser_context.wait_for_event(event, **kwargs)
Аргументы
-
Имя события, то же самое, которое обычно передается в
*.on(event). -
predicateCallable (опционально)#Получает данные события и разрешает в истинное значение, когда ожидание должно разрешиться.
-
Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя browser_context.set_default_timeout().
Возвращает
Properties
browser
Добавлено до v1.9Возвращает экземпляр браузера, которому принадлежит этот контекст. Возвращает null, если контекст создан вне обычного браузера, например в Android или Electron.
Использование
browser_context.browser
Возвращает
clock
Добавлено в: v1.45Playwright имеет возможность имитировать часы и ход времени.
Использование
browser_context.clock
Тип
pages
Добавлено до v1.9Возвращает все открытые страницы в контексте.
Использование
browser_context.pages
Возвращает
request
Добавлено в: v1.16Помощник для тестирования API, связанный с этим контекстом. Запросы, сделанные с помощью этого API, будут использовать куки контекста.
Использование
browser_context.request
Тип
service_workers
Добавлено в: v1.11Service workers поддерживаются только в браузерах на базе Chromium.
Все существующие service workers в контексте.
Использование
browser_context.service_workers
Возвращает
tracing
Добавлено в: v1.12Использование
browser_context.tracing
Тип
Events
on("close")
Добавлено до v1.9Вызывается, когда контекст браузера закрывается. Это может произойти по одной из следующих причин:
- Контекст браузера закрыт.
- Приложение браузера закрыто или аварийно завершило работу.
- Метод browser.close() был вызван.
Использование
browser_context.on("close", handler)
Данные события
on("console")
Добавлено в: v1.34Вызывается, когда JavaScript на странице вызывает один из методов консоли API, например, console.log или console.dir.
Аргументы, переданные в console.log, и страница доступны в аргументе обработчика события ConsoleMessage.
Использование
- Sync
- Async
def print_args(msg):
for arg in msg.args:
print(arg.json_value())
context.on("console", print_args)
page.evaluate("console.log('hello', 5, { foo: 'bar' })")
async def print_args(msg):
values = []
for arg in msg.args:
values.append(await arg.json_value())
print(values)
context.on("console", print_args)
await page.evaluate("console.log('hello', 5, { foo: 'bar' })")
Данные события
on("dialog")
Добавлено в: v1.34Вызывается, когда появляется JavaScript-диалог, такой как alert, prompt, confirm или beforeunload. Слушатель должен либо dialog.accept(), либо dialog.dismiss() диалог - в противном случае страница заморозится, ожидая диалог, и действия, такие как клик, никогда не завершатся.
Использование
context.on("dialog", lambda dialog: dialog.accept())
Когда нет слушателей page.on("dialog") или browser_context.on("dialog"), все диалоги автоматически отклоняются.
Данные события
on("page")
Добавлено до v1.9Событие вызывается, когда в BrowserContext создается новая страница. Страница может все еще загружаться. Событие также будет срабатывать для всплывающих страниц. См. также page.on("popup") для получения событий о всплывающих окнах, относящихся к конкретной странице.
Самый ранний момент, когда страница доступна, это когда она перешла на начальный URL. Например, при открытии всплывающего окна с помощью window.open('http://example.com'), это событие сработает, когда сетевой запрос к "http://example.com" будет выполнен и его ответ начнет загружаться во всплывающем окне. Если вы хотите маршрутизировать/слушать этот сетевой запрос, используйте browser_context.route() и browser_context.on("request") соответственно, вместо аналогичных методов на Page.
- Sync
- Async
with context.expect_page() as page_info:
page.get_by_text("open new page").click(),
page = page_info.value
print(page.evaluate("location.href"))
async with context.expect_page() as page_info:
await page.get_by_text("open new page").click(),
page = await page_info.value
print(await page.evaluate("location.href"))
Используйте page.wait_for_load_state(), чтобы дождаться, пока страница достигнет определенного состояния (в большинстве случаев это не потребуется).
Использование
browser_context.on("page", handler)
Данные события
on("request")
Добавлено в: v1.12Вызывается, когда запрос отправляется с любой страницы, созданной через этот контекст. Объект request доступен только для чтения. Чтобы слушать только запросы с определенной страницы, используйте page.on("request").
Для перехвата и изменения запросов, см. browser_context.route() или page.route().
Использование
browser_context.on("request", handler)
Данные события
on("requestfailed")
Добавлено в: v1.12Вызывается, когда запрос не удается выполнить, например, из-за тайм-аута. Чтобы слушать только неудачные запросы с определенной страницы, используйте page.on("requestfailed").
HTTP ошибки, такие как 404 или 503, все еще считаются успешными ответами с точки зрения HTTP, поэтому запрос завершится событием browser_context.on("requestfinished"), а не browser_context.on("requestfailed").
Использование
browser_context.on("requestfailed", handler)
Данные события
on("requestfinished")
Добавлено в: v1.12Вызывается, когда запрос успешно завершается после загрузки тела ответа. Для успешного ответа последовательность событий: request, response и requestfinished. Чтобы слушать успешные запросы с определенной страницы, используйте page.on("requestfinished").
Использование
browser_context.on("requestfinished", handler)
Данные события
on("response")
Добавлено в: v1.12Вызывается, когда response статус и заголовки получены для запроса. Для успешного ответа последовательность событий: request, response и requestfinished. Чтобы слушать события ответа с определенной страницы, используйте page.on("response").
Использование
browser_context.on("response", handler)
Данные события
on("serviceworker")
Добавлено в: v1.11Service workers поддерживаются только в браузерах на базе Chromium.
Вызывается, когда в контексте создается новый service worker.
Использование
browser_context.on("serviceworker", handler)
Данные события
on("weberror")
Добавлено в: v1.38Вызывается, когда исключение не обработано ни на одной из страниц в этом контексте. Чтобы отслеживать ошибки на конкретной странице, используйте page.on("pageerror").
Использование
browser_context.on("weberror", handler)
Данные события
Deprecated
on("backgroundpage")
Добавлено в: v1.11Фоновые страницы были удалены из Chromium вместе с расширениями Manifest V2.
Это событие не генерируется.
Использование
browser_context.on("backgroundpage", handler)
Данные события
background_pages
Добавлено в: v1.11Фоновые страницы были удалены из Chromium вместе с расширениями Manifest V2.
Возвращает пустой список.
Использование
browser_context.background_pages
Возвращает