BrowserContext
BrowserContexts provide a way to operate multiple independent browser sessions.
If a page opens another page, e.g. with a window.open
call, the popup will belong to the parent page's browser context.
Playwright allows creating isolated non-persistent browser contexts with browser.new_context() method. Non-persistent browser contexts don't write any browsing data to disk.
- 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()
Methods
add_cookies
Added before v1.9Adds cookies into this browser context. All pages within this context will have these cookies installed. Cookies can be obtained via browser_context.cookies().
Использование
- Sync
- Async
browser_context.add_cookies([cookie_object1, cookie_object2])
await browser_context.add_cookies([cookie_object1, cookie_object2])
Аргументы
cookies
List[Dict]#-
name
str -
value
str -
url
str (optional)Either url or domain / path are required. Optional.
-
domain
str (optional)For the cookie to apply to all subdomains as well, prefix domain with a dot, like this: ".example.com". Either url or domain / path are required. Optional.
-
path
str (optional)Either url or domain / path are required Optional.
-
expires
float (optional)Unix time in seconds. Optional.
-
httpOnly
bool (optional)Optional.
-
secure
bool (optional)Optional.
-
sameSite
"Strict" | "Lax" | "None" (optional)Optional.
-
Возвращает
add_init_script
Added before v1.9Adds a script which would be evaluated in one of the following scenarios:
- Whenever a page is created in the browser context or is navigated.
- Whenever a child frame is attached or navigated in any page in the browser context. In this case, the script is evaluated in the context of the newly attached frame.
The script is evaluated after the document was created but before any of its scripts were run. This is useful to amend the JavaScript environment, e.g. to seed Math.random
.
Использование
An example of overriding Math.random
before the page loads:
// 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")
The order of evaluation of multiple scripts installed via browser_context.add_init_script() and page.add_init_script() is not defined.
Аргументы
-
path
Union[str, pathlib.Path] (optional)#Path to the JavaScript file. If
path
is a relative path, then it is resolved relative to the current working directory. Optional. -
Script to be evaluated in all pages in the browser context. Optional.
Возвращает
clear_cookies
Added before v1.9Removes cookies from context. Accepts optional filter.
Использование
- 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")
Аргументы
-
domain
str | Pattern (optional) Added in: v1.43#Only removes cookies with the given domain.
-
name
str | Pattern (optional) Added in: v1.43#Only removes cookies with the given name.
-
path
str | Pattern (optional) Added in: v1.43#Only removes cookies with the given path.
Возвращает
clear_permissions
Added before v1.9Clears all permission overrides for the browser context.
Использование
- 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
Added before v1.9Closes the browser context. All the pages that belong to the browser context will be closed.
The default browser context cannot be closed.
Использование
browser_context.close()
browser_context.close(**kwargs)
Аргументы
-
reason
str (optional) Added in: v1.40#The reason to be reported to the operations interrupted by the context closure.
Возвращает
cookies
Added before v1.9If no URLs are specified, this method returns all cookies. If URLs are specified, only cookies that affect those URLs are returned.
Использование
browser_context.cookies()
browser_context.cookies(**kwargs)
Аргументы
Возвращает
expect_console_message
Added in: v1.34Performs action and waits for a ConsoleMessage to be logged by in the pages in the context. If predicate is provided, it passes ConsoleMessage value into the predicate
function and waits for predicate(message)
to return a truthy value. Will throw an error if the page is closed before the browser_context.on("console") event is fired.
Использование
browser_context.expect_console_message()
browser_context.expect_console_message(**kwargs)
Аргументы
-
predicate
Callable[ConsoleMessage]:bool (optional)#Receives the ConsoleMessage object and resolves to truthy value when the waiting should resolve.
-
Maximum time to wait for in milliseconds. Defaults to
30000
(30 seconds). Pass0
to disable timeout. The default value can be changed by using the browser_context.set_default_timeout().
Возвращает
expect_event
Added before v1.9Waits for event to fire and passes its value into the predicate function. Returns when the predicate returns truthy value. Will throw an error if the context closes before the event is fired. Returns the event data value.
Использование
- 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
Аргументы
-
Event name, same one would pass into
browserContext.on(event)
. -
predicate
Callable (optional)#Receives the event data and resolves to truthy value when the waiting should resolve.
-
Maximum time to wait for in milliseconds. Defaults to
30000
(30 seconds). Pass0
to disable timeout. The default value can be changed by using the browser_context.set_default_timeout().
Возвращает
expect_page
Добавлено в: v1.9Выполняет действие и ожидает создания новой Page в контексте. Если предоставлен предикат, он передает значение Page в функцию predicate
и ожидает, пока predicate(event)
не вернет истинное значение. Выдаст ошибку, если контекст закроется до создания новой Page.
Использование
browser_context.expect_page()
browser_context.expect_page(**kwargs)
Аргументы
-
predicate
Callable[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'
'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-кэш.
Аргументы
-
url
str | Pattern | Callable[URL]:bool#Глобальный шаблон, шаблон регулярного выражения или предикат, получающий URL для сопоставления при маршрутизации. Когда base_url через параметры контекста был предоставлен и переданный URL является путем, он объединяется через
new URL()
конструктор. -
handler
Callable[Route, Request]:Promise[Any] | Any#функция-обработчик для маршрутизации запроса.
-
times
int (опционально) Добавлено в: v1.15#Как часто маршрут должен использоваться. По умолчанию он будет использоваться каждый раз.
Возвращает
route_from_har
Added in: 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)
Аргументы
-
har
Union[str, pathlib.Path]#Путь к HAR файлу с предварительно записанными сетевыми данными. Если
path
является относительным путем, то он разрешается относительно текущей рабочей директории. -
not_found
"abort" | "fallback" (опционально)#- Если установлено в 'abort', любой запрос, не найденный в HAR файле, будет прерван.
- Если установлено в 'fallback', переходит к следующему обработчику маршрута в цепочке обработчиков.
По умолчанию прерывается.
-
Если указано, обновляет данный HAR с фактической сетевой информацией вместо обслуживания из файла. Файл записывается на диск, когда вызывается browser_context.close().
-
update_content
"embed" | "attach" (опционально) Added in: v1.32#Опциональная настройка для управления содержимым ресурсов. Если указано
attach
, ресурсы сохраняются как отдельные файлы или записи в ZIP архиве. Если указаноembed
, содержимое сохраняется встраиваемым в HAR файл. -
update_mode
"full" | "minimal" (опционально) Added in: v1.32#Когда установлено в
minimal
, записывается только информация, необходимая для маршрутизации из HAR. Это исключает размеры, время, страницы, куки, безопасность и другие типы информации HAR, которые не используются при воспроизведении из HAR. По умолчаниюminimal
. -
url
str | Pattern (опционально)#Глобальный шаблон, регулярное выражение или предикат для сопоставления URL запроса. Только запросы с URL, соответствующим шаблону, будут обслуживаться из HAR файла. Если не указано, все запросы обслуживаются из HAR файла.
Возвращает
route_web_socket
Added in: 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)
Аргументы
-
url
str | Pattern | Callable[URL]:bool#Только WebSocket с URL, соответствующим этому шаблону, будут маршрутизироваться. Строковый шаблон может быть относительным к base_url опции контекста.
-
handler
Callable[WebSocketRoute]:Promise[Any] | Any#Функция-обработчик для маршрутизации WebSocket.
Возвращает
set_default_navigation_timeout
Added before 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
Added before v1.9Эта настройка изменит максимальное время по умолчанию для всех методов, принимающих опцию timeout.
Использование
browser_context.set_default_timeout(timeout)
Аргументы
set_extra_http_headers
Added before 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
Added before 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
Added before v1.9Использование
browser_context.set_offline(offline)
Аргументы
Возвращает
storage_state
Added before v1.9Возвращает состояние хранилища для этого контекста браузера, содержит текущие куки, снимок локального хранилища и снимок IndexedDB.
Использование
browser_context.storage_state()
browser_context.storage_state(**kwargs)
Аргументы
-
indexed_db
bool (опционально) Added in: v1.51#Установите в
true
, чтобы включить IndexedDB в снимок состояния хранилища. Если ваше приложение использует IndexedDB для хранения токенов аутентификации, таких как Firebase Authentication, включите это.примечаниеIndexedDB с типизированными массивами в настоящее время не поддерживаются.
-
path
Union[str, pathlib.Path] (опционально)#Путь к файлу для сохранения состояния хранилища. Если path является относительным путем, то он разрешается относительно текущей рабочей директории. Если путь не указан, состояние хранилища все равно возвращается, но не будет сохранено на диск.
Возвращает
unroute
Added before v1.9Удаляет маршрут, созданный с помощью browser_context.route(). Когда handler не указан, удаляет все маршруты для url.
Использование
browser_context.unroute(url)
browser_context.unroute(url, **kwargs)
Аргументы
-
url
str | Pattern | Callable[URL]:bool#Глобальный шаблон, шаблон регулярного выражения или предикат, получающий URL, использованный для регистрации маршрутизации с browser_context.route().
-
handler
Callable[Route, Request]:Promise[Any] | Any (опционально)#Опциональная функция-обработчик, использованная для регистрации маршрутизации с browser_context.route().
Возвращает
unroute_all
Added in: 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
Added before 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)
. -
predicate
Callable (опционально)#Получает данные события и разрешает в истинное значение, когда ожидание должно разрешиться.
-
Максимальное время ожидания в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя browser_context.set_default_timeout().
Возвращает
Properties
background_pages
Added in: v1.11Background pages are only supported on Chromium-based browsers.
Все существующие фоновые страницы в контексте.
Использование
browser_context.background_pages
Возвращает
browser
Added before v1.9Возвращает экземпляр браузера для данного контекста. Если он был запущен как постоянный контекст, возвращается null.
Использование
browser_context.browser
Возвращает
clock
Added in: v1.45Playwright имеет возможность имитировать часы и ход времени.
Использование
browser_context.clock
Type
pages
Added before v1.9Возвращает все открытые страницы в контексте.
Использование
browser_context.pages
Возвращает
request
Added in: v1.16Помощник для тестирования API, связанный с этим контекстом. Запросы, сделанные с помощью этого API, будут использовать куки контекста.
Использование
browser_context.request
Type
service_workers
Added in: v1.11Service workers are only supported on Chromium-based browsers.
Все существующие service workers в контексте.
Использование
browser_context.service_workers
Возвращает
tracing
Added in: v1.12Использование
browser_context.tracing
Type
Events
on("backgroundpage")
Added in: v1.11Only works with Chromium browser's persistent context.
Вызывается, когда в контексте создается новая фоновая страница.
- Sync
- Async
background_page = context.wait_for_event("backgroundpage")
background_page = await context.wait_for_event("backgroundpage")
Использование
browser_context.on("backgroundpage", handler)
Данные события
on("close")
Added before v1.9Вызывается, когда контекст браузера закрывается. Это может произойти по одной из следующих причин:
- Контекст браузера закрыт.
- Приложение браузера закрыто или аварийно завершило работу.
- Метод browser.close() был вызван.
Использование
browser_context.on("close", handler)
Данные события
on("console")
Added in: 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")
Added in: 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")
Added before 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")
Added in: v1.12Вызывается, когда запрос отправляется с любой страницы, созданной через этот контекст. Объект request доступен только для чтения. Чтобы слушать только запросы с определенной страницы, используйте page.on("request").
Для перехвата и изменения запросов, см. browser_context.route() или page.route().
Использование
browser_context.on("request", handler)
Данные события
on("requestfailed")
Added in: v1.12Вызывается, когда запрос не удается выполнить, например, из-за тайм-аута. Чтобы слушать только неудачные запросы с определенной страницы, используйте page.on("requestfailed").
HTTP ошибки, такие как 404 или 503, все еще считаются успешными ответами с точки зрения HTTP, поэтому запрос завершится событием browser_context.on("requestfinished"), а не browser_context.on("requestfailed").
Использование
browser_context.on("requestfailed", handler)
Данные события
on("requestfinished")
Added in: v1.12Вызывается, когда запрос успешно завершается после загрузки тела ответа. Для успешного ответа последовательность событий: request
, response
и requestfinished
. Чтобы слушать успешные запросы с определенной страницы, используйте page.on("requestfinished").
Использование
browser_context.on("requestfinished", handler)
Данные события
on("response")
Added in: v1.12Вызывается, когда response статус и заголовки получены для запроса. Для успешного ответа последовательность событий: request
, response
и requestfinished
. Чтобы слушать события ответа с определенной страницы, используйте page.on("response").
Использование
browser_context.on("response", handler)
Данные события
on("serviceworker")
Added in: v1.11Service workers are only supported on Chromium-based browsers.
Вызывается, когда в контексте создается новый service worker.
Использование
browser_context.on("serviceworker", handler)
Данные события
on("weberror")
Добавлено в: v1.38Вызывается, когда исключение не обработано ни на одной из страниц в этом контексте. Чтобы отслеживать ошибки на конкретной странице, используйте page.on("pageerror").
Использование
browser_context.on("weberror", handler)
Данные события