Skip to main content

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

Added before 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

Added before 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

Added in: v1.11 browserContext.BackgroundPages
注意

背景頁面僅在基於 Chromium 的瀏覽器上受支援。

上下文中所有現有的背景頁面。

用法

BrowserContext.BackgroundPages

返回


Browser

Added before v1.9 browserContext.Browser

傳回上下文的瀏覽器實例。如果它是以持久性上下文啟動的,則傳回 null。

用法

BrowserContext.Browser

返回


ClearCookiesAsync

Added before 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? (可選)Added in: v1.43#

      僅移除具有給定網域的 Cookie。

    • Name|NameRegex string? | Regex? (可選)Added in: v1.43#

      僅移除具有給定名稱的 Cookie。

    • Path|PathRegex string? | Regex? (可選)Added in: v1.43#

      僅移除具有給定路徑的 Cookie。

返回


ClearPermissionsAsync

Added before 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

Added before v1.9 browserContext.CloseAsync

關閉瀏覽器上下文。屬於瀏覽器上下文的所有頁面都將關閉。

注意

預設瀏覽器上下文無法關閉。

用法

await BrowserContext.CloseAsync(options);

引數

  • options BrowserContextCloseOptions? (可選)
    • Reason string? (可選)Added in: v1.40#

      要報告給上下文關閉中斷的操作的原因。

返回


CookiesAsync

Added before v1.9 browserContext.CookiesAsync

如果未指定 URL,則此方法傳回所有 Cookie。如果指定了 URL,則僅傳回影響這些 URL 的 Cookie。

用法

await BrowserContext.CookiesAsync(urls);

引數

返回


ExposeBindingAsync

Added before 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

Added before 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

Added before 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' (系統專屬 midi)
    • 'midi'
    • 'notifications'
    • 'payment-handler'
    • 'storage-access'
  • options BrowserContextGrantPermissionsOptions? (可選)

返回


NewCDPSessionAsync

Added in: v1.11 browserContext.NewCDPSessionAsync
注意

CDP 會話僅在基於 Chromium 的瀏覽器上受支援。

傳回新建立的會話。

用法

await BrowserContext.NewCDPSessionAsync(page);

引數

  • page Page | Frame#

    要為其建立新會話的目標。為了向後相容,此參數名為 page,但它可以是 PageFrame 類型。

返回


NewPageAsync

Added before v1.9 browserContext.NewPageAsync

在瀏覽器上下文中建立新頁面。

用法

await BrowserContext.NewPageAsync();

返回


Pages

Added before v1.9 browserContext.Pages

傳回上下文中所有開啟的頁面。

用法

BrowserContext.Pages

返回


RouteAsync

Added before v1.9 browserContext.RouteAsync

路由提供修改瀏覽器上下文中任何頁面發出的網路請求的功能。啟用路由後,除非繼續、滿足或中止,否則每個符合 url 模式的請求都將停滯。

注意

BrowserContext.RouteAsync() 不會攔截 Service Worker 攔截的請求。請參閱 問題。我們建議在使用請求攔截時停用 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();

或使用 regex 模式的相同程式碼片段

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 模式、regex 模式或接收 URL 的述詞,以在路由時進行比對。當透過上下文選項提供 BaseURL 且傳遞的 URL 是路徑時,它會透過 new URL() 建構函式合併。

  • handler Action<Route>#

    用於路由請求的處理常式函式。

  • options BrowserContextRouteOptions? (可選)

    • Times int? (可選)Added in: v1.15#

      路由應使用的頻率。預設情況下,每次都會使用它。

返回


RouteFromHARAsync

Added in: v1.23 browserContext.RouteFromHARAsync

如果指定,則在此上下文中發出的網路請求將從 HAR 檔案提供。閱讀有關 從 HAR 重新播放 的更多資訊。

Playwright 不會從 HAR 檔案提供 Service Worker 攔截的請求。請參閱 問題。我們建議在使用請求攔截時停用 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 }? (可選)Added in: v1.32#

      用於控制資源內容管理的可選設定。如果指定 attach,則資源會以個別檔案或 ZIP 歸檔中的條目形式保存。如果指定 embed,則內容會內嵌儲存在 HAR 檔案中。

    • UpdateMode enum HarMode { Full, Minimal }? (可選)Added in: v1.32#

      當設定為 minimal 時,僅記錄從 HAR 路由所需的資訊。這會省略在從 HAR 重新播放時未使用的尺寸、計時、頁面、Cookie、安全性和其他類型的 HAR 資訊。預設為 minimal

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

      用於比對請求 URL 的 Glob 模式、正則表達式或述詞。只有 URL 符合模式的請求才會從 HAR 檔案提供服務。如果未指定,則所有請求都從 HAR 檔案提供服務。

返回


RouteWebSocketAsync

Added in: 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();
});

引數

返回


RunAndWaitForConsoleMessageAsync

Added in: v1.34 browserContext.RunAndWaitForConsoleMessageAsync

執行動作並等待上下文中頁面記錄的 ConsoleMessage。如果提供述詞,它會將 ConsoleMessage 值傳遞到 predicate 函式中,並等待 predicate(message) 傳回真值。如果頁面在觸發 BrowserContext.Console 事件之前關閉,則會擲回錯誤。

用法

await BrowserContext.RunAndWaitForConsoleMessageAsync(action, options);

引數

  • action Func<Task>#

    觸發事件的動作。

  • options BrowserContextRunAndWaitForConsoleMessageOptions? (可選)

返回


WaitForConsoleMessageAsync

Added in: v1.34 browserContext.WaitForConsoleMessageAsync

執行動作並等待上下文中頁面記錄的 ConsoleMessage。如果提供述詞,它會將 ConsoleMessage 值傳遞到 predicate 函式中,並等待 predicate(message) 傳回真值。如果頁面在觸發 BrowserContext.Console 事件之前關閉,則會擲回錯誤。

用法

await BrowserContext.WaitForConsoleMessageAsync(action, options);

引數

  • options BrowserContextRunAndWaitForConsoleMessageOptions? (可選)

返回


RunAndWaitForPageAsync

Added in: v1.9 browserContext.RunAndWaitForPageAsync

執行動作並等待在上下文中建立新的 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

Added in: v1.9 browserContext.WaitForPageAsync

執行動作並等待在上下文中建立新的 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

Added before v1.9 browserContext.SetDefaultNavigationTimeout

此設定將變更以下方法和相關快捷方式的預設最大導航時間

用法

BrowserContext.SetDefaultNavigationTimeout(timeout);

引數

  • timeout [float]#

    最大導航時間,以毫秒為單位


SetDefaultTimeout

Added before v1.9 browserContext.SetDefaultTimeout

此設定將變更所有接受 timeout 選項的方法的預設最大時間。

用法

BrowserContext.SetDefaultTimeout(timeout);

引數

  • timeout [float]#

    最大時間,以毫秒為單位。傳遞 0 以停用逾時。


SetExtraHTTPHeadersAsync

Added before v1.9 browserContext.SetExtraHTTPHeadersAsync

額外的 HTTP 標頭將與上下文中任何頁面發起的每個請求一起傳送。這些標頭會與使用 Page.SetExtraHTTPHeadersAsync() 設定的頁面特定額外 HTTP 標頭合併。如果頁面覆寫了特定標頭,則將使用頁面特定的標頭值,而不是瀏覽器上下文標頭值。

注意

BrowserContext.SetExtraHTTPHeadersAsync() 不保證傳出請求中標頭的順序。

用法

await BrowserContext.SetExtraHTTPHeadersAsync(headers);

引數

  • headers IDictionary<string, string>#

    一個物件,包含要與每個請求一起傳送的額外 HTTP 標頭。所有標頭值都必須是字串。

返回


SetGeolocationAsync

Added before 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

Added before v1.9 browserContext.SetOfflineAsync

用法

await BrowserContext.SetOfflineAsync(offline);

引數

  • offline bool#

    是否模擬瀏覽器上下文離線網路狀態。

返回


StorageStateAsync

Added before v1.9 browserContext.StorageStateAsync

傳回此瀏覽器上下文的儲存狀態,包含目前的 Cookie 和本機儲存體快照。

用法

await BrowserContext.StorageStateAsync(options);

引數

  • options BrowserContextStorageStateOptions? (選用)
    • Path string? (選用)#

      儲存儲存狀態的檔案路徑。如果 Path 是相對路徑,則會相對於目前的工作目錄解析。如果未提供路徑,仍會傳回儲存狀態,但不會儲存到磁碟。

返回


UnrouteAsync

Added before 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

Added in: v1.11 browserContext.event BackgroundPage
注意

僅適用於 Chromium 瀏覽器的持久性上下文。

當在上下文中建立新的背景頁面時發出。

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

用法

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

事件資料


event Close

Added before v1.9 browserContext.event Close

當瀏覽器上下文關閉時發出。這可能是由於以下原因之一

  • 瀏覽器上下文已關閉。
  • 瀏覽器應用程式已關閉或崩潰。
  • 已呼叫 Browser.CloseAsync() 方法。

用法

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

事件資料


event Console

Added in: v1.34 browserContext.event Console

當頁面內的 JavaScript 呼叫其中一個 console 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

Added in: v1.34 browserContext.event Dialog

當出現 JavaScript 對話方塊時發出,例如 alertpromptconfirmbeforeunload。接聽程式必須 Dialog.AcceptAsync()Dialog.DismissAsync() 對話方塊 - 否則頁面將 凍結 等待對話方塊,並且像點擊這樣的動作永遠不會完成。

用法

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

當沒有 Page.DialogBrowserContext.Dialog 接聽程式時,所有對話方塊都會自動關閉。

事件資料


event Page

Added before 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) => {};

事件資料