BrowserContext
BrowserContexts предоставляют способ работы с несколькими независимыми сессиями браузера.
Если страница открывает другую страницу, например, с помощью вызова window.open
, всплывающее окно будет принадлежать контексту браузера родительской страницы.
Playwright позволяет создавать изолированные непостоянные контексты браузера с помощью метода Browser.NewContextAsync(). Непостоянные контексты браузера не записывают данные о просмотре на диск.
using var playwright = await Playwright.CreateAsync();
var browser = await playwright.Firefox.LaunchAsync(new() { Headless = false });
// Создать новый инкогнито-контекст браузера
var context = await browser.NewContextAsync();
// Создать новую страницу внутри контекста.
var page = await context.NewPageAsync();
await page.GotoAsync("https://bing.com");
// Закрыть контекст, когда он больше не нужен.
await context.CloseAsync();
Методы
AddCookiesAsync
Добавлено до v1.9Добавляет куки в этот контекст браузера. Все страницы в этом контексте будут иметь установленные куки. Куки можно получить с помощью BrowserContext.CookiesAsync().
Использование
await context.AddCookiesAsync(new[] { cookie1, cookie2 });
Аргументы
cookies
IEnumerable<Cookie
>#-
Name
string -
Value
string -
Url
string? (опционально)Либо url, либо домен/путь обязательны. Опционально.
-
Domain
string? (опционально)Чтобы куки применялись ко всем поддоменам, добавьте точку перед доменом, например: ".example.com". Либо url, либо домен/путь обязательны. Опционально.
-
Path
string? (опционально)Либо url, либо домен/путь обязательны. Опционально.
-
Expires
[float]? (опционально)Время Unix в секундах. Опционально.
-
HttpOnly
bool? (опционально)Опционально.
-
Secure
bool? (опционально)Опционально.
-
SameSite
enum SameSiteAttribute { Strict, Lax, None }?
(опционально)Опционально.
-
Возвращает
AddInitScriptAsync
Добавлено до v1.9Добавляет скрипт, который будет выполнен в одном из следующих сценариев:
- Всякий раз, когда страница создается в контексте браузера или происходит навигация.
- Всякий раз, когда дочерний фрейм прикрепляется или происходит навигация в любом фрейме в контексте браузера. В этом случае скрипт выполняется в контексте вновь прикрепленного фрейма.
Скрипт выполняется после создания документа, но до выполнения любых его скриптов. Это полезно для изменения среды JavaScript, например, для задания начального значения Math.random
.
Использование
Пример переопределения Math.random
перед загрузкой страницы:
// preload.js
Math.random = () => 42;
await Context.AddInitScriptAsync(scriptPath: "preload.js");
Порядок выполнения нескольких скриптов, установленных через BrowserContext.AddInitScriptAsync() и Page.AddInitScriptAsync(), не определен.
Аргументы
Возвращает
BackgroundPages
Добавлено в: v1.11Фоновые страницы поддерживаются только в браузерах на основе Chromium.
Все существующие фоновые страницы в контексте.
Использование
BrowserContext.BackgroundPages
Возвращает
Browser
Добавлено до v1.9Возвращает экземпляр браузера контекста. Если он был запущен как постоянный контекст, возвращается null.
Использование
BrowserContext.Browser
Возвращает
ClearCookiesAsync
Добавлено до v1.9Удаляет куки из контекста. Принимает необязательный фильтр.
Использование
await context.ClearCookiesAsync();
await context.ClearCookiesAsync(new() { Name = "session-id" });
await context.ClearCookiesAsync(new() { Domain = "my-origin.com" });
await context.ClearCookiesAsync(new() { Path = "/api/v1" });
await context.ClearCookiesAsync(new() { Name = "session-id", Domain = "my-origin.com" });
Аргументы
options
BrowserContextClearCookiesOptions?
(опционально)-
Domain|DomainRegex
string? | Regex? (опционально) Добавлено в: v1.43#Удаляет только куки с указанным доменом.
-
Name|NameRegex
string? | Regex? (опционально) Добавлено в: v1.43#Удаляет только куки с указанным именем.
-
Path|PathRegex
string? | Regex? (опционально) Добавлено в: v1.43#Удаляет только куки с указанным путем.
-
Возвращает
ClearPermissionsAsync
Добавлено до v1.9Очищает все переопределения разрешений для контекста браузера.
Использование
var context = await browser.NewContextAsync();
await context.GrantPermissionsAsync(new[] { "clipboard-read" });
// В качестве альтернативы, вы можете использовать вспомогательный класс ContextPermissions
// для указания разрешений...
// выполняйте действия ...
await context.ClearPermissionsAsync();
Возвращает
CloseAsync
Добавлено до v1.9Закрывает контекст браузера. Все страницы, принадлежащие контексту браузера, будут закрыты.
Контекст браузера по умолчанию не может быть закрыт.
Использование
await BrowserContext.CloseAsync(options);
Аргументы
options
BrowserContextCloseOptions?
(опционально)
Возвращает
CookiesAsync
Добавлено до v1.9Если URL-адреса не указаны, этот метод возвращает все куки. Если URL-адреса указаны, возвращаются только куки, которые влияют на эти URL-адреса.
Использование
await BrowserContext.CookiesAsync(urls);
Аргументы
-
urls
string? | IEnumerable?<string> (опционально)#Необязательный список URL-адресов.
Возвращает
- IEnumerable<
Cookie
>#
ExposeBindingAsync
Добавлено до v1.9Метод добавляет функцию с именем name в объект window
каждого фрейма на каждой странице в контексте. При вызове функция выполняет callback и возвращает Promise, который разрешается в возвращаемое значение callback. Если callback возвращает Promise, он будет ожидаться.
Первый аргумент функции callback содержит информацию о вызывающем: { browserContext: BrowserContext, page: Page, frame: Frame }
.
См. Page.ExposeBindingAsync() для версии только для страницы.
Использование
Пример предоставления URL страницы всем фреймам на всех страницах в контексте:
using Microsoft.Playwright;
using var playwright = await Playwright.CreateAsync();
var browser = await playwright.Webkit.LaunchAsync(new() { Headless = false });
var context = await browser.NewContextAsync();
await context.ExposeBindingAsync("pageURL", source => source.Page.Url);
var page = await context.NewPageAsync();
await page.SetContentAsync("<script>\n" +
" async function onClick() {\n" +
" document.querySelector('div').textContent = await window.pageURL();\n" +
" }\n" +
"</script>\n" +
"<button onclick=\"onClick()\">Click me</button>\n" +
"<div></div>");
await page.GetByRole(AriaRole.Button).ClickAsync();
Аргументы
-
Имя функции в объекте window.
-
callback
Action<BindingSource, T, [TResult]>#Функция обратного вызова, которая будет вызвана в контексте Playwright.
-
options
BrowserContextExposeBindingOptions?
(опционально)
Возвращает
ExposeFunctionAsync
Добавлено до v1.9Метод добавляет функцию с именем name в объект window
каждого фрейма на каждой странице в контексте. При вызове функция выполняет callback и возвращает Promise, который разрешается в возвращаемое значение callback.
Если callback возвращает Promise, он будет ожидаться.
См. Page.ExposeFunctionAsync() для версии только для страницы.
Использование
Пример добавления функции sha256
на все страницы в контексте:
using Microsoft.Playwright;
using System;
using System.Security.Cryptography;
using System.Threading.Tasks;
class BrowserContextExamples
{
public static async Task Main()
{
using var playwright = await Playwright.CreateAsync();
var browser = await playwright.Webkit.LaunchAsync(new() { Headless = false });
var context = await browser.NewContextAsync();
await context.ExposeFunctionAsync("sha256", (string input) =>
{
return Convert.ToBase64String(
SHA256.Create().ComputeHash(System.Text.Encoding.UTF8.GetBytes(input)));
});
var page = await context.NewPageAsync();
await page.SetContentAsync("<script>\n" +
" async function onClick() {\n" +
" document.querySelector('div').textContent = await window.sha256('PLAYWRIGHT');\n" +
" }\n" +
"</script>\n" +
"<button onclick=\"onClick()\">Click me</button>\n" +
"<div></div>");
await page.GetByRole(AriaRole.Button).ClickAsync();
Console.WriteLine(await page.TextContentAsync("div"));
}
}
Аргументы
-
Имя функции в объекте window.
-
callback
Action<T, [TResult]>#Функция обратного вызова, которая будет вызвана в контексте Playwright.
Возвращает
GrantPermissionsAsync
Добавлено до v1.9Предоставляет указанные разрешения для контекста браузера. Предоставляет соответствующие разрешения только для указанного источника, если он указан.
Использование
await BrowserContext.GrantPermissionsAsync(permissions, options);
Аргументы
-
permissions
IEnumerable<string>#Список разрешений для предоставления.
осторожноПоддерживаемые разрешения различаются между браузерами и даже между разными версиями одного и того же браузера. Любое разрешение может перестать работать после обновления.
Вот некоторые разрешения, которые могут поддерживаться некоторыми браузерами:
'accelerometer'
'ambient-light-sensor'
'background-sync'
'camera'
'clipboard-read'
'clipboard-write'
'geolocation'
'gyroscope'
'magnetometer'
'microphone'
'midi-sysex'
(системно-эксклюзивный midi)'midi'
'notifications'
'payment-handler'
'storage-access'
-
options
BrowserContextGrantPermissionsOptions?
(опционально)-
[Источник], для которого предоставляются разрешения, например, "https://example.com".
-
Возвращает
NewCDPSessionAsync
Добавлено в: v1.11Сессии CDP поддерживаются только в браузерах на основе Chromium.
Возвращает вновь созданную сессию.
Использование
await BrowserContext.NewCDPSessionAsync(page);
Аргументы
-
Цель для создания новой сессии. Для обратной совместимости этот параметр называется
page
, но он может быть типаPage
илиFrame
.
Возвращает
NewPageAsync
Добавлено до v1.9Создает новую страницу в контексте браузера.
Использование
await BrowserContext.NewPageAsync();
Возвращает
Pages
Добавлено до v1.9Возвращает все открытые страницы в контексте.
Использование
BrowserContext.Pages
Возвращает
RouteAsync
Добавлено до v1.9Маршрутизация предоставляет возможность изменять сетевые запросы, которые выполняются любой страницей в контексте браузера. Как только маршрут включен, каждый запрос, соответствующий шаблону URL, будет приостановлен, если он не будет продолжен, выполнен или прерван.
BrowserContext.RouteAsync() не будет перехватывать запросы, перехваченные Service Worker. См. эту проблему. Мы рекомендуем отключать Service Workers при использовании перехвата запросов, установив ServiceWorkers в 'block'
.
Использование
Пример простого обработчика, который прерывает все запросы изображений:
var context = await browser.NewContextAsync();
var page = await context.NewPageAsync();
await context.RouteAsync("**/*.{png,jpg,jpeg}", r => r.AbortAsync());
await page.GotoAsync("https://theverge.com");
await browser.CloseAsync();
или тот же фрагмент с использованием шаблона регулярного выражения:
var context = await browser.NewContextAsync();
var page = await context.NewPageAsync();
await context.RouteAsync(new Regex("(\\.png$)|(\\.jpg$)"), r => r.AbortAsync());
await page.GotoAsync("https://theverge.com");
await browser.CloseAsync();
Возможно исследовать запрос, чтобы решить, какое действие маршрута предпринять. Например, имитация всех запросов, содержащих некоторые данные POST, и оставление всех остальных запросов без изменений:
await page.RouteAsync("/api/**", async r =>
{
if (r.Request.PostData.Contains("my-string"))
await r.FulfillAsync(new() { Body = "mocked-data" });
else
await r.ContinueAsync();
});
Маршруты страниц (установленные с помощью Page.RouteAsync()) имеют приоритет над маршрутами контекста браузера, когда запрос соответствует обоим обработчикам.
Чтобы удалить маршрут с его обработчиком, вы можете использовать BrowserContext.UnrouteAsync().
Включение маршрутизации отключает http-кэш.
Аргументы
-
url
string | Regex | Func<string, bool>#Шаблон глоба, шаблон регулярного выражения или предикат, получающий URL для сопоставления при маршрутизации. Когда BaseURL через параметры контекста был предоставлен и переданный URL является путем, он объединяется через
new URL()
конструктор. -
Функция обработчика для маршрутизации запроса.
-
options
BrowserContextRouteOptions?
(опционально)
Возвращает
RouteFromHARAsync
Добавлено в: v1.23Если указано, сетевые запросы, сделанные в контексте, будут обслуживаться из HAR-файла. Подробнее читайте в разделе Воспроизведение из HAR.
Playwright не будет обслуживать запросы, перехваченные Service Worker, из HAR-файла. См. эту проблему. Мы рекомендуем отключать Service Workers при использовании перехвата запросов, установив ServiceWorkers в 'block'
.
Использование
await BrowserContext.RouteFromHARAsync(har, options);
Аргументы
-
Путь к HAR файлу с предварительно записанными сетевыми данными. Если
path
является относительным путем, то он разрешается относительно текущей рабочей директории. -
options
BrowserContextRouteFromHAROptions?
(опционально)-
NotFound
enum HarNotFound { Abort, Fallback }?
(опционально)#- Если установлено значение 'abort', любой запрос, не найденный в HAR-файле, будет прерван.
- Если установлено значение 'fallback', переходит к следующему обработчику маршрута в цепочке обработчиков.
По умолчанию прерывается.
-
Если указано, обновляет данный HAR с фактической сетевой информацией вместо обслуживания из файла. Файл записывается на диск, когда вызывается BrowserContext.CloseAsync().
-
UpdateContent
enum RouteFromHarUpdateContentPolicy { Embed, Attach }?
(опционально) Добавлено в: v1.32#Опциональная настройка для управления содержимым ресурсов. Если указано
attach
, ресурсы сохраняются как отдельные файлы или записи в ZIP-архиве. Если указаноembed
, содержимое хранится встроенным в HAR-файл. -
UpdateMode
enum HarMode { Full, Minimal }?
(опционально) Добавлено в: v1.32#Когда установлено значение
minimal
, записывается только информация, необходимая для маршрутизации из HAR. Это исключает размеры, время, страницу, куки, безопасность и другие типы информации HAR, которые не используются при воспроизведении из HAR. По умолчаниюminimal
. -
Url|UrlRegex
string? | Regex? (опционально)#Шаблон глоба, регулярное выражение или предикат для сопоставления URL запроса. Только запросы с URL, соответствующим шаблону, будут обслуживаться из HAR-файла. Если не указано, все запросы обслуживаются из HAR-файла.
-
Возвращает
RouteWebSocketAsync
Добавлено в: v1.48Этот метод позволяет изменять соединения WebSocket, которые создаются любой страницей в контексте браузера.
Обратите внимание, что только WebSocket
, созданные после вызова этого метода, будут маршрутизироваться. Рекомендуется вызывать этот метод перед созданием любых страниц.
Использование
Ниже приведен пример простого обработчика, который блокирует некоторые сообщения WebSocket. Подробнее и примеры смотрите в WebSocketRoute.
await context.RouteWebSocketAsync("/ws", async ws => {
ws.RouteSend(message => {
if (message == "to-be-blocked")
return;
ws.Send(message);
});
await ws.ConnectAsync();
});
Аргументы
-
url
string | Regex | Func<string, bool>#Только WebSocket с URL, соответствующим этому шаблону, будут маршрутизироваться. Строковый шаблон может быть относительным к опции контекста BaseURL.
-
handler
Action<WebSocketRoute>#Функция-обработчик для маршрутизации WebSocket.
Возвращает
RunAndWaitForConsoleMessageAsync
Добавлено в: v1.34Выполняет действие и ждет, пока ConsoleMessage не будет зарегистрировано на страницах в контексте. Если предикат предоставлен, он передает значение ConsoleMessage в функцию predicate
и ждет, пока predicate(message)
не вернет истинное значение. Выдаст ошибку, если страница будет закрыта до того, как событие BrowserContext.Console будет вызвано.
Использование
await BrowserContext.RunAndWaitForConsoleMessageAsync(action, options);
Аргументы
-
Действие, которое вызывает событие.
-
options
BrowserContextRunAndWaitForConsoleMessageOptions?
(опционально)-
Predicate
Func<ConsoleMessage?, bool> (опционально)#Получает объект ConsoleMessage и разрешается в истинное значение, когда ожидание должно завершиться.
-
Timeout
[float]? (опционально)#Максимальное время ожидания в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя BrowserContext.SetDefaultTimeout().
-
Возвращает
WaitForConsoleMessageAsync
Добавлено в: v1.34Выполняет действие и ждет, пока ConsoleMessage не будет зарегистрировано на страницах в контексте. Если предикат предоставлен, он передает значение ConsoleMessage в функцию predicate
и ждет, пока predicate(message)
не вернет истинное значение. Выдаст ошибку, если страница будет закрыта до того, как событие BrowserContext.Console будет вызвано.
Использование
await BrowserContext.WaitForConsoleMessageAsync(action, options);
Аргументы
options
BrowserContextRunAndWaitForConsoleMessageOptions?
(опционально)-
Predicate
Func<ConsoleMessage?, bool> (опционально)#Получает объект ConsoleMessage и разрешается в истинное значение, когда ожидание должно завершиться.
-
Timeout
[float]? (опционально)#Максимальное время ожидания в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя BrowserContext.SetDefaultTimeout().
-
Возвращает
RunAndWaitForPageAsync
Добавлено в: v1.9Выполняет действие и ждет, пока в контексте не будет создана новая Page. Если предикат предоставлен, он передает значение Page в функцию predicate
и ждет, пока predicate(event)
не вернет истинное значение. Выдаст ошибку, если контекст закроется до создания новой Page.
Использование
await BrowserContext.RunAndWaitForPageAsync(action, options);
Аргументы
-
action
Func<Task> Добавлено в: v1.12#Действие, которое вызывает событие.
-
options
BrowserContextRunAndWaitForPageOptions?
(опционально)-
Predicate
Func<Page?, bool> (опционально)#Получает объект Page и разрешается в истинное значение, когда ожидание должно завершиться.
-
Timeout
[float]? (опционально)#Максимальное время ожидания в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя BrowserContext.SetDefaultTimeout().
-
Возвращает
WaitForPageAsync
Добавлено в: v1.9Выполняет действие и ждет, пока в контексте не будет создана новая Page. Если предикат предоставлен, он передает значение Page в функцию predicate
и ждет, пока predicate(event)
не вернет истинное значение. Выдаст ошибку, если контекст закроется до создания новой Page.
Использование
await BrowserContext.WaitForPageAsync(action, options);
Аргументы
options
BrowserContextRunAndWaitForPageOptions?
(опционально)-
Predicate
Func<Page?, bool> (опционально)#Получает объект Page и разрешается в истинное значение, когда ожидание должно завершиться.
-
Timeout
[float]? (опционально)#Максимальное время ожидания в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя BrowserContext.SetDefaultTimeout().
-
Возвращает
SetDefaultNavigationTimeout
Добавлено до v1.9Эта настройка изменит максимальное время навигации по умолчанию для следующих методов и связанных с ними ярлыков:
- Page.GoBackAsync()
- Page.GoForwardAsync()
- Page.GotoAsync()
- Page.ReloadAsync()
- Page.SetContentAsync()
- Page.RunAndWaitForNavigationAsync()
Использование
BrowserContext.SetDefaultNavigationTimeout(timeout);
Аргументы
-
timeout
[float]#Максимальное время навигации в миллисекундах
SetDefaultTimeout
Добавлено до v1.9Эта настройка изменит максимальное время по умолчанию для всех методов, принимающих опцию timeout.
Использование
BrowserContext.SetDefaultTimeout(timeout);
Аргументы
-
timeout
[float]#Максимальное время в миллисекундах. Передайте
0
, чтобы отключить тайм-аут.
SetExtraHTTPHeadersAsync
Добавлено до v1.9Дополнительные HTTP-заголовки будут отправляться с каждым запросом, инициированным любой страницей в контексте. Эти заголовки объединяются с дополнительными HTTP-заголовками, установленными для страницы с помощью Page.SetExtraHTTPHeadersAsync(). Если страница переопределяет конкретный заголовок, будет использоваться значение заголовка, специфичное для страницы, вместо значения заголовка контекста браузера.
BrowserContext.SetExtraHTTPHeadersAsync() не гарантирует порядок заголовков в исходящих запросах.
Использование
await BrowserContext.SetExtraHTTPHeadersAsync(headers);
Аргументы
-
headers
IDictionary<string, string>#Объект, содержащий дополнительные HTTP-заголовки, которые будут отправляться с каждым запросом. Все значения заголовков должны быть строками.
Возвращает
SetGeolocationAsync
Добавлено до v1.9Устанавливает геолокацию контекста. Передача null
или undefined
эмулирует недоступность позиции.
Использование
await context.SetGeolocationAsync(new Geolocation()
{
Latitude = 59.95f,
Longitude = 30.31667f
});
Рассмотрите возможность использования BrowserContext.GrantPermissionsAsync() для предоставления разрешений страницам контекста браузера на чтение его геолокации.
Аргументы
geolocation
Geolocation?#-
Latitude
[float]Широта между -90 и 90.
-
Longitude
[float]Долгота между -180 и 180.
-
Accuracy
[float]? (опционально)Неотрицательное значение точности. По умолчанию
0
.
-
Возвращает
SetOfflineAsync
Добавлено до v1.9Использование
await BrowserContext.SetOfflineAsync(offline);
Аргументы
Возвращает
StorageStateAsync
Добавлено до v1.9Возвращает состояние хранилища для этого контекста браузера, содержит текущие куки, снимок локального хранилища и снимок IndexedDB.
Использование
await BrowserContext.StorageStateAsync(options);
Аргументы
options
BrowserContextStorageStateOptions?
(опционально)-
IndexedDB
bool? (опционально) Добавлено в: v1.51#Установите в
true
, чтобы включить IndexedDB в снимок состояния хранилища. Если ваше приложение использует IndexedDB для хранения токенов аутентификации, таких как Firebase Authentication, включите это.примечаниеIndexedDB с типизированными массивами в настоящее время не поддерживается.
-
Путь к файлу для сохранения состояния хранилища. Если Path является относительным путем, то он разрешается относительно текущей рабочей директории. Если путь не указан, состояние хранилища все равно возвращается, но не будет сохранено на диск.
-
Возвращает
UnrouteAsync
Добавлено до v1.9Удаляет маршрут, созданный с помощью BrowserContext.RouteAsync(). Когда handler не указан, удаляет все маршруты для url.
Использование
await BrowserContext.UnrouteAsync(url, handler);
Аргументы
-
url
string | Regex | Func<string, bool>#Шаблон глоба, шаблон регулярного выражения или предикат, получающий URL, использованный для регистрации маршрутизации с BrowserContext.RouteAsync().
-
handler
Action<Route?> (опционально)#Опциональная функция-обработчик, использованная для регистрации маршрутизации с BrowserContext.RouteAsync().
Возвращает
UnrouteAllAsync
Добавлено в: v1.41Удаляет все маршруты, созданные с помощью BrowserContext.RouteAsync() и BrowserContext.RouteFromHARAsync().
Использование
await BrowserContext.UnrouteAllAsync(options);
Аргументы
options
BrowserContextUnrouteAllOptions?
(опционально)-
Behavior
enum UnrouteBehavior { Wait, IgnoreErrors, Default }?
(опционально)#Указывает, ждать ли уже выполняющихся обработчиков и что делать, если они выбрасывают ошибки:
'default'
- не ждать завершения текущих вызовов обработчиков (если есть), если удаленный обработчик выбрасывает ошибку, это может привести к необработанной ошибке'wait'
- ждать завершения текущих вызовов обработчиков (если есть)'ignoreErrors'
- не ждать завершения текущих вызовов обработчиков (если есть), все ошибки, выброшенные обработчиками после удаления маршрутизации, тихо перехватываются
-
Возвращает
Свойства
APIRequest
Добавлено в: v1.16Помощник для тестирования API, связанный с этим контекстом. Запросы, сделанные с помощью этого API, будут использовать куки контекста.
Использование
BrowserContext.APIRequest
Тип
Clock
Добавлено в: v1.45Playwright имеет возможность имитировать часы и ход времени.
Использование
BrowserContext.Clock
Тип
Tracing
Добавлено в: v1.12Использование
BrowserContext.Tracing
Тип
События
event BackgroundPage
Добавлено в: v1.11Работает только с постоянным контекстом браузера Chromium.
Вызывается, когда в контексте создается новая фоновая страница.
context.BackgroundPage += (_, backgroundPage) =>
{
Console.WriteLine(backgroundPage.Url);
};
Использование
BrowserContext.BackgroundPage += async (_, page) => {};
Данные события
event Close
Добавлено до v1.9Вызывается, когда контекст браузера закрывается. Это может произойти по одной из следующих причин:
- Контекст браузера закрыт.
- Приложение браузера закрыто или аварийно завершено.
- Метод Browser.CloseAsync() был вызван.
Использование
BrowserContext.Close += async (_, browserContext) => {};
Данные события
event Console
Добавлено в: v1.34Вызывается, когда JavaScript на странице вызывает один из методов консоли API, например, console.log
или console.dir
.
Аргументы, переданные в console.log
, и страница доступны в аргументе обработчика события ConsoleMessage.
Использование
context.Console += async (_, msg) =>
{
foreach (var arg in msg.Args)
Console.WriteLine(await arg.JsonValueAsync<object>());
};
await page.EvaluateAsync("console.log('hello', 5, { foo: 'bar' })");
Данные события
событие Dialog
Добавлено в: v1.34Вызывается, когда появляется JavaScript-диалог, такой как alert
, prompt
, confirm
или beforeunload
. Слушатель должен либо Dialog.AcceptAsync(), либо Dialog.DismissAsync() диалог - в противном случае страница заморозится, ожидая диалог, и действия, такие как клик, никогда не завершатся.
Использование
Context.Dialog += async (_, dialog) =>
{
await dialog.AcceptAsync();
};
Когда нет слушателей Page.Dialog или BrowserContext.Dialog, все диалоги автоматически отклоняются.
Данные события
событие Page
Добавлено до v1.9Событие вызывается, когда в BrowserContext создается новая страница. Страница может все еще загружаться. Событие также будет срабатывать для всплывающих страниц. См. также Page.Popup для получения событий о всплывающих окнах, относящихся к конкретной странице.
Самый ранний момент, когда страница доступна, это когда она перешла на начальный URL. Например, при открытии всплывающего окна с помощью window.open('http://example.com')
, это событие сработает, когда сетевой запрос к "http://example.com" будет выполнен и его ответ начнет загружаться во всплывающем окне. Если вы хотите маршрутизировать/слушать этот сетевой запрос, используйте BrowserContext.RouteAsync() и BrowserContext.Request соответственно, вместо аналогичных методов на Page.
var popup = await context.RunAndWaitForPageAsync(async =>
{
await page.GetByText("open new page").ClickAsync();
});
Console.WriteLine(await popup.EvaluateAsync<string>("location.href"));
Используйте Page.WaitForLoadStateAsync(), чтобы дождаться, пока страница достигнет определенного состояния (в большинстве случаев это не потребуется).
Использование
BrowserContext.Page += async (_, page) => {};
Данные события
событие Request
Добавлено в: v1.12Вызывается, когда запрос отправляется с любой страницы, созданной через этот контекст. Объект request доступен только для чтения. Чтобы слушать запросы только с определенной страницы, используйте Page.Request.
Для перехвата и изменения запросов, см. BrowserContext.RouteAsync() или Page.RouteAsync().
Использование
BrowserContext.Request += async (_, request) => {};
Данные события
событие RequestFailed
Добавлено в: v1.12Вызывается, когда запрос не удается выполнить, например, из-за тайм-аута. Чтобы слушать только неудачные запросы с определенной страницы, используйте Page.RequestFailed.
Ответы с HTTP-ошибками, такие как 404 или 503, все еще считаются успешными с точки зрения HTTP, поэтому запрос завершится событием BrowserContext.RequestFinished, а не BrowserContext.RequestFailed.
Использование
BrowserContext.RequestFailed += async (_, request) => {};
Данные события
событие RequestFinished
Добавлено в: v1.12Вызывается, когда запрос успешно завершается после загрузки тела ответа. Для успешного ответа последовательность событий: request
, response
и requestfinished
. Чтобы слушать успешные запросы с определенной страницы, используйте Page.RequestFinished.
Использование
BrowserContext.RequestFinished += async (_, request) => {};
Данные события
событие Response
Добавлено в: v1.12Вызывается, когда статус и заголовки response получены для запроса. Для успешного ответа последовательность событий: request
, response
и requestfinished
. Чтобы слушать события ответа с определенной страницы, используйте Page.Response.
Использование
BrowserContext.Response += async (_, response) => {};
Данные события
событие WebError
Добавлено в: v1.38Вызывается, когда исключение не обрабатывается на любой из страниц в этом контексте. Чтобы слушать ошибки с определенной страницы, используйте Page.PageError.
Использование
BrowserContext.WebError += async (_, webError) => {};
Данные события