跳到主要内容

BrowserContext

BrowserContexts 提供了一种操作多个独立浏览器会话的方法。

如果一个页面打开了另一个页面,例如通过 window.open 调用,则弹出窗口将属于父页面的浏览器上下文。

Playwright 允许使用 Browser.NewContextAsync() 方法创建隔离的非持久浏览器上下文。非持久浏览器上下文不会将任何浏览数据写入磁盘。

using var playwright = await Playwright.CreateAsync();
var browser = await playwright.Firefox.LaunchAsync(new() { Headless = false });
// Create a new incognito browser context
var context = await browser.NewContextAsync();
// Create a new page inside context.
var page = await context.NewPageAsync();
await page.GotoAsync("https://bing.com");
// Dispose context once it is no longer needed.
await context.CloseAsync();

方法

AddCookiesAsync

添加于 v1.9 之前 browserContext.AddCookiesAsync

将 Cookie 添加到此浏览器上下文中。此上下文中的所有页面都将安装这些 Cookie。Cookie 可以通过 BrowserContext.CookiesAsync() 获取。

用法

await context.AddCookiesAsync(new[] { cookie1, cookie2 });

参数

  • cookies IEnumerable<Cookie>#
    • Name string

    • Value string

    • Url string? (可选)

      url 或 domain / path 都是必需的。可选。

    • Domain string? (可选)

      为了使 Cookie 也适用于所有子域名,请在域名前加上一个点,例如:".example.com"。url 或 domain / path 都是必需的。可选。

    • Path string? (可选)

      url 或 domain / path 都是必需的可选。

    • Expires [float]? (可选)

      Unix 时间戳,以秒为单位。可选。

    • HttpOnly bool? (可选)

      可选。

    • Secure bool? (可选)

      可选。

    • SameSite enum SameSiteAttribute { Strict, Lax, None }? (可选)

      可选。

返回值


AddInitScriptAsync

添加于 v1.9 之前 browserContext.AddInitScriptAsync

添加一个脚本,该脚本将在以下场景之一中执行:

  • 每当在浏览器上下文中创建或导航页面时。
  • 每当子框架在浏览器上下文中任何页面中附加或导航时。在这种情况下,脚本将在新附加的框架的上下文中执行。

脚本在文档创建后但在其任何脚本运行之前执行。这对于修改 JavaScript 环境非常有用,例如,为 Math.random 播种。

用法

在页面加载之前覆盖 Math.random 的示例

// preload.js
Math.random = () => 42;
await Context.AddInitScriptAsync(scriptPath: "preload.js");
注意

通过 BrowserContext.AddInitScriptAsync()Page.AddInitScriptAsync() 安装的多个脚本的评估顺序未定义。

参数

  • script string | string#

    要在浏览器上下文中所有页面中评估的脚本。

返回值


BackgroundPages

添加于:v1.11 browserContext.BackgroundPages
注意

后台页面仅在基于 Chromium 的浏览器上受支持。

上下文中所有现有的后台页面。

用法

BrowserContext.BackgroundPages

返回值


Browser

添加于 v1.9 之前 browserContext.Browser

返回上下文的浏览器实例。如果它是作为持久上下文启动的,则返回 null。

用法

BrowserContext.Browser

返回值


ClearCookiesAsync

添加于 v1.9 之前 browserContext.ClearCookiesAsync

从上下文中删除 Cookie。接受可选过滤器。

用法

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#

      仅删除具有给定域的 Cookie。

    • Name|NameRegex string? | Regex? (可选)添加于:v1.43#

      仅删除具有给定名称的 Cookie。

    • Path|PathRegex string? | Regex? (可选)添加于:v1.43#

      仅删除具有给定路径的 Cookie。

返回值


ClearPermissionsAsync

添加于 v1.9 之前 browserContext.ClearPermissionsAsync

清除浏览器上下文的所有权限覆盖。

用法

var context = await browser.NewContextAsync();
await context.GrantPermissionsAsync(new[] { "clipboard-read" });
// Alternatively, you can use the helper class ContextPermissions
// to specify the permissions...
// do stuff ...
await context.ClearPermissionsAsync();

返回值


CloseAsync

添加于 v1.9 之前 browserContext.CloseAsync

关闭浏览器上下文。属于浏览器上下文的所有页面都将被关闭。

注意

默认浏览器上下文无法关闭。

用法

await BrowserContext.CloseAsync(options);

参数

  • options BrowserContextCloseOptions? (可选)
    • Reason string? (可选)添加于:v1.40#

      要报告给上下文关闭中断的操作的原因。

返回值


CookiesAsync

添加于 v1.9 之前 browserContext.CookiesAsync

如果未指定 URL,则此方法返回所有 Cookie。如果指定了 URL,则仅返回影响这些 URL 的 Cookie。

用法

await BrowserContext.CookiesAsync(urls);

参数

返回值


ExposeBindingAsync

添加于 v1.9 之前 browserContext.ExposeBindingAsync

此方法在上下文中每个页面的每个框架的 window 对象上添加一个名为 name 的函数。当调用该函数时,它会执行 callback 并返回一个 Promise,该 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();

参数

  • name string#

    window 对象上的函数名称。

  • callback Action<BindingSource, T, [TResult]>#

    将在 Playwright 上下文中调用的回调函数。

  • options BrowserContextExposeBindingOptions? (可选)

    • Handle bool? (可选)#

      已弃用

      此选项将在未来版本中移除。

      是否将参数作为句柄传递,而不是按值传递。当传递句柄时,仅支持一个参数。当按值传递时,支持多个参数。

返回值


ExposeFunctionAsync

添加于 v1.9 之前 browserContext.ExposeFunctionAsync

此方法在上下文中每个页面的每个框架的 window 对象上添加一个名为 name 的函数。当调用该函数时,它会执行 callback 并返回一个 Promise,该 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"));
}
}

参数

  • name string#

    window 对象上的函数名称。

  • callback Action<T, [TResult]>#

    将在 Playwright 上下文中调用的回调函数。

返回值


GrantPermissionsAsync

添加于 v1.9 之前 browserContext.GrantPermissionsAsync

向浏览器上下文授予指定的权限。如果指定了来源,则仅向给定的来源授予相应的权限。

用法

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' (system-exclusive midi)
    • 'midi'
    • 'notifications'
    • 'payment-handler'
    • 'storage-access'
  • options BrowserContextGrantPermissionsOptions? (可选)

返回值


NewCDPSessionAsync

添加于:v1.11 browserContext.NewCDPSessionAsync
注意

CDP 会话仅在基于 Chromium 的浏览器上受支持。

返回新创建的会话。

用法

await BrowserContext.NewCDPSessionAsync(page);

参数

  • page Page | Frame#

    要为其创建新会话的目标。为了向后兼容,此参数名为 page,但它可以是 PageFrame 类型。

返回值


NewPageAsync

添加于 v1.9 之前 browserContext.NewPageAsync

在浏览器上下文中创建一个新页面。

用法

await BrowserContext.NewPageAsync();

返回值


Pages

添加于 v1.9 之前 browserContext.Pages

返回上下文中所有打开的页面。

用法

BrowserContext.Pages

返回值


RouteAsync

添加于 v1.9 之前 browserContext.RouteAsync

路由提供了修改浏览器上下文中任何页面发出的网络请求的功能。启用路由后,每个与 url 模式匹配的请求都将暂停,除非它被继续、完成或中止。

注意

BrowserContext.RouteAsync() 不会拦截 Service Worker 拦截的请求。请参阅 this 问题。我们建议在使用请求拦截时禁用 Service Worker,方法是将 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>#

    一个 glob 模式、正则表达式模式或谓词,用于接收 URL 以在路由时进行匹配。当通过上下文选项提供了 BaseURL 并且传递的 URL 是路径时,它将通过 new URL() 构造函数合并。

  • handler Action<Route>#

    用于路由请求的处理函数。

  • options BrowserContextRouteOptions? (可选)

    • Times int? (可选)添加于:v1.15#

      路由应使用的频率。默认情况下,每次都会使用它。

返回值


RouteFromHARAsync

添加于:v1.23 browserContext.RouteFromHARAsync

如果指定,则在此上下文中发出的网络请求将从 HAR 文件中提供。阅读更多关于 从 HAR 文件回放

Playwright 将不会从 HAR 文件中提供 Service Worker 拦截的请求。请参阅 this 问题。我们建议在使用请求拦截时禁用 Service Worker,方法是将 ServiceWorkers 设置为 'block'

用法

await BrowserContext.RouteFromHARAsync(har, options);

参数

  • har string#

    包含预先录制的网络数据的 HAR 文件的路径。如果 path 是相对路径,则它相对于当前工作目录解析。

  • options BrowserContextRouteFromHAROptions? (可选)

    • NotFound enum HarNotFound { Abort, Fallback }? (可选)#

      • 如果设置为 'abort',则任何在 HAR 文件中未找到的请求都将被中止。
      • 如果设置为 'fallback',则会传递给处理程序链中的下一个路由处理程序。

      默认为中止。

    • Update bool? (可选)#

      如果指定,则使用实际网络信息更新给定的 HAR,而不是从文件提供服务。当调用 BrowserContext.CloseAsync() 时,文件将被写入磁盘。

    • UpdateContent enum RouteFromHarUpdateContentPolicy { Embed, Attach }? (可选)添加于:v1.32#

      用于控制资源内容管理的可选设置。如果指定 attach,则资源将作为单独的文件或 ZIP 存档中的条目持久保存。如果指定 embed,则内容将以内联方式存储在 HAR 文件中。

    • UpdateMode enum HarMode { Full, Minimal }? (可选)添加于:v1.32#

      当设置为 minimal 时,仅记录从 HAR 路由所需的信息。这省略了大小、时间、页面、Cookie、安全性和其他类型的 HAR 信息,这些信息在从 HAR 重放时未使用。默认为 minimal

    • Url|UrlRegex string? | Regex? (可选)#

      一个 glob 模式、正则表达式或谓词,用于匹配请求 URL。只有 URL 与模式匹配的请求才会从 HAR 文件中提供。如果未指定,则所有请求都将从 HAR 文件中提供。

返回值


RouteWebSocketAsync

添加于:v1.48 browserContext.RouteWebSocketAsync

此方法允许修改浏览器上下文中任何页面建立的 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>#

    只有 url 与此模式匹配的 WebSocket 才会被路由。字符串模式可以是相对于 BaseURL 上下文选项的相对路径。

  • handler Action<WebSocketRoute>#

    用于路由 WebSocket 的处理函数。

返回值


RunAndWaitForConsoleMessageAsync

添加于版本: v1.34 browserContext.RunAndWaitForConsoleMessageAsync

执行操作并等待上下文中页面记录 ConsoleMessage。如果提供了 predicate,它会将 ConsoleMessage 值传递到 predicate 函数中,并等待 predicate(message) 返回真值。如果在 BrowserContext.Console 事件触发之前页面关闭,将抛出错误。

用法

await BrowserContext.RunAndWaitForConsoleMessageAsync(action, options);

参数

  • action Func<Task>#

    触发事件的操作。

  • options BrowserContextRunAndWaitForConsoleMessageOptions? (可选)

返回值


WaitForConsoleMessageAsync

添加于版本: v1.34 browserContext.WaitForConsoleMessageAsync

执行操作并等待上下文中页面记录 ConsoleMessage。如果提供了 predicate,它会将 ConsoleMessage 值传递到 predicate 函数中,并等待 predicate(message) 返回真值。如果在 BrowserContext.Console 事件触发之前页面关闭,将抛出错误。

用法

await BrowserContext.WaitForConsoleMessageAsync(action, options);

参数

  • options BrowserContextRunAndWaitForConsoleMessageOptions? (可选)

返回值


RunAndWaitForPageAsync

添加于版本: v1.9 browserContext.RunAndWaitForPageAsync

执行操作并等待在上下文中创建新的 Page。如果提供了 predicate,它会将 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 browserContext.WaitForPageAsync

执行操作并等待在上下文中创建新的 Page。如果提供了 predicate,它会将 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 之前 browserContext.SetDefaultNavigationTimeout

此设置将更改以下方法和相关快捷方式的默认最大导航时间

用法

BrowserContext.SetDefaultNavigationTimeout(timeout);

参数

  • timeout [float]#

    最大导航时间(以毫秒为单位)


SetDefaultTimeout

添加于 v1.9 之前 browserContext.SetDefaultTimeout

此设置将更改所有接受 timeout 选项的方法的默认最大时间。

用法

BrowserContext.SetDefaultTimeout(timeout);

参数

  • timeout [float]#

    最大时间(以毫秒为单位)。传递 0 以禁用超时。


SetExtraHTTPHeadersAsync

添加于 v1.9 之前 browserContext.SetExtraHTTPHeadersAsync

额外的 HTTP 标头将与上下文中任何页面发起的每个请求一起发送。这些标头与使用 Page.SetExtraHTTPHeadersAsync() 设置的页面特定额外 HTTP 标头合并。如果页面覆盖了特定标头,则将使用页面特定的标头值,而不是浏览器上下文标头值。

注意

BrowserContext.SetExtraHTTPHeadersAsync() 不保证传出请求中标头的顺序。

用法

await BrowserContext.SetExtraHTTPHeadersAsync(headers);

参数

  • headers IDictionary<string, string>#

    一个对象,其中包含要随每个请求发送的附加 HTTP 标头。所有标头值都必须是字符串。

返回值


SetGeolocationAsync

添加于 v1.9 之前 browserContext.SetGeolocationAsync

设置上下文的地理位置。传递 nullundefined 模拟位置不可用。

用法

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 之前 browserContext.SetOfflineAsync

用法

await BrowserContext.SetOfflineAsync(offline);

参数

  • offline bool#

    是否模拟浏览器上下文的网络离线状态。

返回值


StorageStateAsync

添加于 v1.9 之前 browserContext.StorageStateAsync

返回此浏览器上下文的存储状态,包含当前 Cookie、本地存储快照和 IndexedDB 快照。

用法

await BrowserContext.StorageStateAsync(options);

参数

  • options BrowserContextStorageStateOptions? (可选)
    • IndexedDB bool? (可选)添加于版本: v1.51#

      设置为 true 以在存储状态快照中包含 IndexedDB。如果您的应用程序使用 IndexedDB 存储身份验证令牌(如 Firebase Authentication),请启用此选项。

      注意

      目前不支持带有类型化数组的 IndexedDB。

    • Path string? (可选)#

      用于保存存储状态的文件路径。如果 Path 是相对路径,则相对于当前工作目录解析。如果未提供路径,则仍会返回存储状态,但不会保存到磁盘。

返回值


UnrouteAsync

添加于 v1.9 之前 browserContext.UnrouteAsync

删除使用 BrowserContext.RouteAsync() 创建的路由。当未指定 handler 时,删除 url 的所有路由。

用法

await BrowserContext.UnrouteAsync(url, handler);

参数

返回值


UnrouteAllAsync

添加于版本: v1.41 browserContext.UnrouteAllAsync

删除使用 BrowserContext.RouteAsync()BrowserContext.RouteFromHARAsync() 创建的所有路由。

用法

await BrowserContext.UnrouteAllAsync(options);

参数

  • options BrowserContextUnrouteAllOptions? (可选)
    • Behavior enum UnrouteBehavior { Wait, IgnoreErrors, Default }? (可选)#

      指定是否等待已在运行的处理程序以及如果它们抛出错误该如何处理

      • 'default' - 不等待当前处理程序调用(如果有)完成,如果未路由的处理程序抛出错误,则可能导致未处理的错误
      • 'wait' - 等待当前处理程序调用(如果有)完成
      • 'ignoreErrors' - 不等待当前处理程序调用(如果有)完成,所有在取消路由后处理程序抛出的错误都会被静默捕获

返回值


属性

APIRequest

添加于版本: v1.16 browserContext.APIRequest

与此上下文关联的 API 测试助手。使用此 API 发出的请求将使用上下文 Cookie。

用法

BrowserContext.APIRequest

类型


Clock

添加于版本: v1.45 browserContext.Clock

Playwright 具有模拟时钟和时间流逝的能力。

用法

BrowserContext.Clock

类型


Tracing

添加于版本: v1.12 browserContext.Tracing

用法

BrowserContext.Tracing

类型


事件

event BackgroundPage

添加于:v1.11 browserContext.event BackgroundPage
注意

仅适用于 Chromium 浏览器的持久上下文。

当上下文中创建新的后台页面时发出。

context.BackgroundPage += (_, backgroundPage) =>
{
Console.WriteLine(backgroundPage.Url);
};

用法

BrowserContext.BackgroundPage += async (_, page) => {};

事件数据


event Close

添加于 v1.9 之前 browserContext.event Close

当浏览器上下文关闭时发出。这可能是由于以下原因之一造成的

  • 浏览器上下文已关闭。
  • 浏览器应用程序已关闭或崩溃。
  • 已调用 Browser.CloseAsync() 方法。

用法

BrowserContext.Close += async (_, browserContext) => {};

事件数据


event Console

添加于版本: v1.34 browserContext.event Console

当页面内的 JavaScript 调用控制台 API 方法(例如 console.logconsole.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' })");

事件数据


event Dialog

添加于版本: v1.34 browserContext.event Dialog

当出现 JavaScript 对话框时发出,例如 alertpromptconfirmbeforeunload。侦听器必须 Dialog.AcceptAsync()Dialog.DismissAsync() 对话框 - 否则页面将 冻结 等待对话框,并且像 click 这样的操作永远不会完成。

用法

Context.Dialog += async (_, dialog) =>
{
await dialog.AcceptAsync();
};
注意

当没有 Page.DialogBrowserContext.Dialog 侦听器存在时,所有对话框都会自动关闭。

事件数据


event Page

添加于 v1.9 之前 browserContext.event Page

当在 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) => {};

事件数据


event Request

添加于版本: v1.12 browserContext.event Request

当通过此上下文创建的任何页面发出请求时发出。 request 对象是只读的。要仅侦听来自特定页面的请求,请使用 Page.Request

为了拦截和修改请求,请参阅 BrowserContext.RouteAsync()Page.RouteAsync()

用法

BrowserContext.Request += async (_, request) => {};

事件数据


event RequestFailed

添加于版本: v1.12 browserContext.event RequestFailed

当请求失败时发出,例如由于超时。要仅侦听来自特定页面的失败请求,请使用 Page.RequestFailed

注意

HTTP 错误响应(例如 404 或 503)从 HTTP 的角度来看仍然是成功的响应,因此请求将使用 BrowserContext.RequestFinished 事件完成,而不是使用 BrowserContext.RequestFailed

用法

BrowserContext.RequestFailed += async (_, request) => {};

事件数据


event RequestFinished

添加于版本: v1.12 browserContext.event RequestFinished

当请求在下载响应正文后成功完成时发出。对于成功的响应,事件顺序为 requestresponserequestfinished。要侦听来自特定页面的成功请求,请使用 Page.RequestFinished

用法

BrowserContext.RequestFinished += async (_, request) => {};

事件数据


event Response

添加于版本: v1.12 browserContext.event Response

当接收到请求的 response 状态和标头时发出。对于成功的响应,事件顺序为 requestresponserequestfinished。要侦听来自特定页面的响应事件,请使用 Page.Response

用法

BrowserContext.Response += async (_, response) => {};

事件数据


event WebError

添加于版本: v1.38 browserContext.event WebError

当在此上下文的任何页面中未处理异常时发出。要侦听来自特定页面的错误,请改用 Page.PageError

用法

BrowserContext.WebError += async (_, webError) => {};

事件数据