BrowserContext
BrowserContexts 提供操作多個獨立瀏覽器會話的方法。
如果頁面開啟另一個頁面,例如使用 window.open
呼叫,則彈出視窗將屬於父頁面的瀏覽器內容。
Playwright 允許使用 browser.new_context() 方法建立隔離的非持久性瀏覽器內容。非持久性瀏覽器內容不會將任何瀏覽資料寫入磁碟。
- 同步
- 非同步
# create a new incognito browser context
context = browser.new_context()
# create a new page inside context.
page = context.new_page()
page.goto("https://example.com")
# dispose context once it is no longer needed.
context.close()
# create a new incognito browser context
context = await browser.new_context()
# create a new page inside context.
page = await context.new_page()
await page.goto("https://example.com")
# dispose context once it is no longer needed.
await context.close()
方法
add_cookies
在 v1.9 之前新增將 Cookie 新增到此瀏覽器內容中。此內容中的所有頁面都將安裝這些 Cookie。Cookie 可以透過 browser_context.cookies() 取得。
用法
- 同步
- 非同步
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 (選用)url 或 domain / path 為必填。選用。
-
domain
str (選用)若要讓 Cookie 也適用於所有子網域,請在網域前面加上點,例如 ".example.com"。url 或 domain / path 為必填。選用。
-
path
str (選用)url 或 domain / path 為必填 選用。
-
expires
float (選用)Unix 時間,以秒為單位。選用。
-
httpOnly
bool (選用)選用。
-
secure
bool (選用)選用。
-
sameSite
"Strict" | "Lax" | "None" (選用)選用。
-
傳回
add_init_script
在 v1.9 之前新增新增一個腳本,該腳本將在以下情況之一中評估
- 每當在瀏覽器內容中建立或導航頁面時。
- 每當在瀏覽器內容中的任何頁面中附加或導航子框架時。在這種情況下,腳本會在新附加的框架的內容中評估。
腳本在文件建立之後但在其任何腳本執行之前評估。這對於修改 JavaScript 環境非常有用,例如,播種 Math.random
。
用法
在頁面載入之前覆寫 Math.random
的範例
// preload.js
Math.random = () => 42;
- 同步
- 非同步
# in your playwright script, assuming the preload.js file is in same directory.
browser_context.add_init_script(path="preload.js")
# in your playwright script, assuming the preload.js file is in same directory.
await browser_context.add_init_script(path="preload.js")
透過 browser_context.add_init_script() 和 page.add_init_script() 安裝的多個腳本的評估順序未定義。
引數
-
path
Union[str, pathlib.Path] (選用)#JavaScript 檔案的路徑。如果
path
是相對路徑,則會相對於目前的工作目錄解析。選用。 -
要在瀏覽器內容中的所有頁面中評估的腳本。選用。
傳回
clear_cookies
在 v1.9 之前新增從內容中移除 Cookie。接受選用篩選器。
用法
- 同步
- 非同步
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 (選用)新增於:v1.43#僅移除具有給定網域的 Cookie。
-
name
str | Pattern (選用)新增於:v1.43#僅移除具有給定名稱的 Cookie。
-
path
str | Pattern (選用)新增於:v1.43#僅移除具有給定路徑的 Cookie。
傳回
clear_permissions
在 v1.9 之前新增清除瀏覽器內容的所有權限覆寫。
用法
- 同步
- 非同步
context = browser.new_context()
context.grant_permissions(["clipboard-read"])
# do stuff ..
context.clear_permissions()
context = await browser.new_context()
await context.grant_permissions(["clipboard-read"])
# do stuff ..
context.clear_permissions()
傳回
close
在 v1.9 之前新增關閉瀏覽器內容。屬於瀏覽器內容的所有頁面都將關閉。
預設瀏覽器內容無法關閉。
用法
browser_context.close()
browser_context.close(**kwargs)
引數
傳回
cookies
在 v1.9 之前新增如果未指定 URL,此方法會傳回所有 Cookie。如果指定了 URL,則僅傳回影響這些 URL 的 Cookie。
用法
browser_context.cookies()
browser_context.cookies(**kwargs)
引數
傳回
expect_console_message
新增於:v1.34執行動作並等待 ConsoleMessage 由內容中的頁面記錄。如果提供了 predicate,它會將 ConsoleMessage 值傳遞到 predicate
函數中,並等待 predicate(message)
傳回 truthy 值。如果頁面在觸發 browser_context.on("console") 事件之前關閉,將會擲回錯誤。
用法
browser_context.expect_console_message()
browser_context.expect_console_message(**kwargs)
引數
-
predicate
Callable[ConsoleMessage]:bool (選用)#接收 ConsoleMessage 物件,並在等待應解析時解析為 truthy 值。
-
等待的最長時間,以毫秒為單位。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 變更。
傳回
expect_event
在 v1.9 之前新增等待事件觸發並將其值傳遞到 predicate 函數中。當 predicate 傳回 truthy 值時傳回。如果內容在事件觸發之前關閉,將會擲回錯誤。傳回事件資料值。
用法
- 同步
- 非同步
with context.expect_event("page") as event_info:
page.get_by_role("button").click()
page = event_info.value
async with context.expect_event("page") as event_info:
await page.get_by_role("button").click()
page = await event_info.value
引數
-
事件名稱,與傳遞到
browserContext.on(event)
的名稱相同。 -
接收事件資料,並在等待應解析時解析為 truthy 值。
-
等待的最長時間,以毫秒為單位。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 變更。
傳回
expect_page
新增於:v1.9執行動作並等待新的 Page 在內容中建立。如果提供了 predicate,它會將 Page 值傳遞到 predicate
函數中,並等待 predicate(event)
傳回 truthy 值。如果內容在建立新的 Page 之前關閉,將會擲回錯誤。
用法
browser_context.expect_page()
browser_context.expect_page(**kwargs)
引數
-
predicate
Callable[Page]:bool (選用)#接收 Page 物件,並在等待應解析時解析為 truthy 值。
-
等待的最長時間,以毫秒為單位。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 變更。
傳回
expose_binding
在 v1.9 之前新增此方法在內容中每個頁面的每個框架的 window
物件上新增一個名為 name 的函數。呼叫時,該函數會執行 callback 並傳回一個 Promise,該 Promise 解析為 callback 的傳回值。如果 callback 傳回 Promise,則將會等待它。
callback 函數的第一個引數包含有關呼叫者的資訊:{ browserContext: BrowserContext, page: Page, frame: Frame }
。
請參閱 page.expose_binding() 以取得僅限頁面的版本。
用法
將頁面 URL 公開給內容中所有頁面的所有框架的範例
- 同步
- 非同步
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 的內容中呼叫的回呼函數。
-
已棄用
此選項將在未來版本中移除。
是否將引數作為控制代碼傳遞,而不是依值傳遞。傳遞控制代碼時,僅支援一個引數。依值傳遞時,支援多個引數。
傳回
expose_function
在 v1.9 之前新增此方法在內容中每個頁面的每個框架的 window
物件上新增一個名為 name 的函數。呼叫時,該函數會執行 callback 並傳回一個 Promise,該 Promise 解析為 callback 的傳回值。
如果 callback 傳回 Promise,則將會等待它。
請參閱 page.expose_function() 以取得僅限頁面的版本。
用法
將 sha256
函數新增到內容中所有頁面的範例
- 同步
- 非同步
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())
引數
傳回
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)
引數
傳回
new_page
在 v1.9 之前新增在瀏覽器內容中建立新頁面。
用法
browser_context.new_page()
傳回
route
在 v1.9 之前新增路由提供修改瀏覽器內容中任何頁面發出的網路請求的功能。啟用路由後,每個符合 url 模式的請求都將停滯,除非它繼續、完成或中止。
browser_context.route() 不會攔截 Service Worker 攔截的請求。請參閱 此 問題。我們建議在使用請求攔截時停用 Service Worker,方法是將 service_workers 設定為 'block'
。
用法
中止所有影像請求的天真處理常式的範例
- 同步
- 非同步
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()
或使用 regex 模式的相同程式碼片段
- 同步
- 非同步
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 資料的所有請求,並將所有其他請求保持原樣
- 同步
- 非同步
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 以進行比對的 glob 模式、regex 模式或 predicate。當透過內容選項提供 base_url 且傳遞的 URL 是路徑時,它會透過
new URL()
建構函式合併。 -
handler
Callable[Route, Request]:Promise[Any] | Any#用於路由請求的處理常式函數。
-
路由應使用的頻率。預設情況下,它將每次使用。
傳回
route_from_har
新增於:v1.23如果指定,則在此內容中發出的網路請求將從 HAR 檔案提供。閱讀更多關於 從 HAR 重新播放。
Playwright 不會從 HAR 檔案提供 Service Worker 攔截的請求。請參閱 此 問題。我們建議在使用請求攔截時停用 Service Worker,方法是將 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" (選用)新增於:v1.32#用於控制資源內容管理的選用設定。如果指定
attach
,則資源會持續儲存為 ZIP 歸檔中的個別檔案或項目。如果指定embed
,則內容會內嵌儲存在 HAR 檔案中。 -
update_mode
"full" | "minimal" (選用)新增於:v1.32#當設定為
minimal
時,僅記錄從 HAR 路由所需的資訊。這會省略大小、時間、頁面、Cookie、安全性和其他類型的 HAR 資訊,這些資訊在從 HAR 重新播放時不會使用。預設為minimal
。 -
用於比對請求 URL 的 glob 模式、正則表達式或 predicate。只有 URL 符合模式的請求才會從 HAR 檔案提供。如果未指定,則所有請求都從 HAR 檔案提供。
傳回
route_web_socket
新增於:v1.48此方法允許修改瀏覽器內容中任何頁面建立的 websocket 連線。
請注意,只有在此方法呼叫之後建立的 WebSocket
s 才會被路由。建議在建立任何頁面之前呼叫此方法。
用法
以下是一個簡單的處理常式的範例,該處理常式會封鎖某些 websocket 訊息。請參閱 WebSocketRoute 以取得更多詳細資訊和範例。
- 同步
- 非同步
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#只有 URL 符合此模式的 WebSocket 才会被路由。字串模式可以是相對於 base_url 內容選項的相對路徑。
-
handler
Callable[WebSocketRoute]:Promise[Any] | Any#用於路由 WebSocket 的處理常式函數。
傳回
set_default_navigation_timeout
在 v1.9 之前新增此設定將變更以下方法和相關捷徑的預設最大導航時間
- page.go_back()
- page.go_forward()
- page.goto()
- page.reload()
- page.set_content()
- page.expect_navigation()
用法
browser_context.set_default_navigation_timeout(timeout)
引數
set_default_timeout
在 v1.9 之前新增此設定將變更所有接受 timeout 選項的方法的預設最大等待時間。
用法
browser_context.set_default_timeout(timeout)
引數
set_extra_http_headers
在 v1.9 之前新增額外的 HTTP 標頭將與 context 中任何頁面發起的每個請求一起發送。這些標頭會與使用 page.set_extra_http_headers() 設定的頁面特定額外 HTTP 標頭合併。如果頁面覆寫了特定的標頭,則將使用頁面特定的標頭值,而不是瀏覽器 context 標頭值。
browser_context.set_extra_http_headers() 不保證傳出請求中標頭的順序。
用法
browser_context.set_extra_http_headers(headers)
引數
傳回
set_geolocation
在 v1.9 之前新增設定 context 的地理位置。傳遞 null
或 undefined
會模擬位置不可用。
用法
- 同步
- 非同步
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() 來授予瀏覽器 context 頁面讀取其地理位置的權限。
引數
傳回
set_offline
在 v1.9 之前新增用法
browser_context.set_offline(offline)
引數
傳回
storage_state
在 v1.9 之前新增傳回此瀏覽器 context 的儲存狀態,包含目前的 Cookie 和本機儲存快照。
用法
browser_context.storage_state()
browser_context.storage_state(**kwargs)
引數
-
path
Union[str, pathlib.Path] (選用)#儲存儲存狀態的檔案路徑。如果 path 是相對路徑,則會相對於目前的工作目錄解析。如果未提供路徑,則仍會傳回儲存狀態,但不會儲存到磁碟。
傳回
unroute
在 v1.9 之前新增移除使用 browser_context.route() 建立的路由。當未指定 handler 時,移除 url 的所有路由。
用法
browser_context.unroute(url)
browser_context.unroute(url, **kwargs)
引數
-
url
str | Pattern | Callable[URL]:bool#Glob 模式、正則表達式模式或謂詞,接收 URL,用於註冊使用 browser_context.route() 的路由。
-
handler
Callable[Route, Request]:Promise[Any] | Any (選用)#用於註冊使用 browser_context.route() 的路由的可選處理函數。
傳回
unroute_all
新增於:v1.41移除所有使用 browser_context.route() 和 browser_context.route_from_har() 建立的路由。
用法
browser_context.unroute_all()
browser_context.unroute_all(**kwargs)
引數
-
behavior
"wait" | "ignoreErrors" | "default" (選用)#指定是否等待已在執行的處理程序,以及如果它們拋出錯誤時該怎麼做
'default'
- 不等待目前處理程序呼叫(如果有的話)完成,如果未路由的處理程序拋出錯誤,可能會導致未處理的錯誤'wait'
- 等待目前處理程序呼叫(如果有的話)完成'ignoreErrors'
- 不等待目前處理程序呼叫(如果有的話)完成,路由移除後處理程序拋出的所有錯誤都會被靜默捕獲
傳回
wait_for_event
在 v1.9 之前新增在大多數情況下,您應該使用 browser_context.expect_event()。
等待給定的 event
觸發。如果提供了謂詞,它會將事件的值傳遞到 predicate
函數中,並等待 predicate(event)
傳回真值。如果瀏覽器 context 在 event
觸發之前關閉,將拋出錯誤。
用法
browser_context.wait_for_event(event)
browser_context.wait_for_event(event, **kwargs)
引數
-
事件名稱,通常與傳遞到
*.on(event)
中的名稱相同。 -
接收事件資料,並在等待應解析時解析為 truthy 值。
-
等待的最長時間,以毫秒為單位。預設為
30000
(30 秒)。傳遞0
以停用逾時。預設值可以使用 browser_context.set_default_timeout() 變更。
傳回
屬性
background_pages
新增於:v1.11背景頁面僅在基於 Chromium 的瀏覽器上受支援。
context 中的所有現有背景頁面。
用法
browser_context.background_pages
傳回
browser
在 v1.9 之前新增傳回 context 的瀏覽器實例。如果它是作為持久性 context 啟動的,則會傳回 null。
用法
browser_context.browser
傳回
clock
新增於:v1.45Playwright 能夠模擬時鐘和時間的流逝。
用法
browser_context.clock
類型
pages
在 v1.9 之前新增傳回 context 中所有開啟的頁面。
用法
browser_context.pages
傳回
request
新增於:v1.16與此 context 關聯的 API 測試輔助工具。使用此 API 發出的請求將使用 context Cookie。
用法
browser_context.request
類型
service_workers
新增於:v1.11Service Worker 僅在基於 Chromium 的瀏覽器上受支援。
context 中的所有現有 Service Worker。
用法
browser_context.service_workers
傳回
tracing
新增於:v1.12用法
browser_context.tracing
類型
事件
on("backgroundpage")
新增於:v1.11僅適用於 Chromium 瀏覽器的持久性 context。
當在 context 中建立新的背景頁面時發出。
- 同步
- 非同步
background_page = context.wait_for_event("backgroundpage")
background_page = await context.wait_for_event("backgroundpage")
用法
browser_context.on("backgroundpage", handler)
事件資料
on("close")
在 v1.9 之前新增當瀏覽器 context 關閉時發出。這可能是由於以下原因之一:
- 瀏覽器 context 已關閉。
- 瀏覽器應用程式已關閉或崩潰。
- 已呼叫 browser.close() 方法。
用法
browser_context.on("close", handler)
事件資料
on("console")
新增於:v1.34當頁面內的 JavaScript 呼叫其中一個 console API 方法時發出,例如 console.log
或 console.dir
。
傳遞到 console.log
的參數和頁面可在 ConsoleMessage 事件處理程序參數中使用。
用法
- 同步
- 非同步
def print_args(msg):
for arg in msg.args:
print(arg.json_value())
context.on("console", print_args)
page.evaluate("console.log('hello', 5, { foo: 'bar' })")
async def print_args(msg):
values = []
for arg in msg.args:
values.append(await arg.json_value())
print(values)
context.on("console", print_args)
await page.evaluate("console.log('hello', 5, { foo: 'bar' })")
事件資料
on("dialog")
新增於:v1.34當 JavaScript 對話框出現時發出,例如 alert
、prompt
、confirm
或 beforeunload
。Listener **必須** dialog.accept() 或 dialog.dismiss() 對話框 - 否則頁面將 凍結 等待對話框,並且像 click 這樣的動作永遠不會完成。
用法
context.on("dialog", lambda dialog: dialog.accept())
當沒有 page.on("dialog") 或 browser_context.on("dialog") 監聽器時,所有對話框都會自動關閉。
事件資料
on("page")
在 v1.9 之前新增當在 BrowserContext 中建立新頁面時發出事件。頁面可能仍在載入中。此事件也將為彈出頁面觸發。另請參閱 page.on("popup") 以接收有關特定頁面的彈出視窗的事件。
頁面可用的最早時刻是它導航到初始 URL 時。例如,當使用 window.open('http://example.com')
開啟彈出視窗時,當對 "http://example.com" 的網路請求完成且其回應已開始在彈出視窗中載入時,此事件將觸發。如果您想路由/監聽此網路請求,請使用 browser_context.route() 和 browser_context.on("request"),而不是 Page 上的類似方法。
- 同步
- 非同步
with context.expect_page() as page_info:
page.get_by_text("open new page").click(),
page = page_info.value
print(page.evaluate("location.href"))
async with context.expect_page() as page_info:
await page.get_by_text("open new page").click(),
page = await page_info.value
print(await page.evaluate("location.href"))
使用 page.wait_for_load_state() 等待頁面達到特定狀態(在大多數情況下您不需要它)。
用法
browser_context.on("page", handler)
事件資料
on("request")
新增於:v1.12當從透過此 context 建立的任何頁面發出請求時發出。 request 物件是唯讀的。若只想監聽來自特定頁面的請求,請使用 page.on("request")。
為了攔截和變更請求,請參閱 browser_context.route() 或 page.route()。
用法
browser_context.on("request", handler)
事件資料
on("requestfailed")
新增於:v1.12當請求失敗時發出,例如由於超時。若只想監聽來自特定頁面的失敗請求,請使用 page.on("requestfailed")。
HTTP 錯誤回應(例如 404 或 503)從 HTTP 的角度來看仍然是成功的回應,因此請求將以 browser_context.on("requestfinished") 事件完成,而不是 browser_context.on("requestfailed")。
用法
browser_context.on("requestfailed", handler)
事件資料
on("requestfinished")
新增於:v1.12當請求在下載回應本文後成功完成時發出。對於成功的回應,事件順序為 request
、response
和 requestfinished
。若要監聽來自特定頁面的成功請求,請使用 page.on("requestfinished")。
用法
browser_context.on("requestfinished", handler)
事件資料
on("response")
新增於:v1.12當收到請求的 response 狀態和標頭時發出。對於成功的回應,事件順序為 request
、response
和 requestfinished
。若要監聽來自特定頁面的回應事件,請使用 page.on("response")。
用法
browser_context.on("response", handler)
事件資料
on("serviceworker")
新增於:v1.11Service Worker 僅在基於 Chromium 的瀏覽器上受支援。
當在 context 中建立新的 Service Worker 時發出。
用法
browser_context.on("serviceworker", handler)
事件資料
on("weberror")
新增於:v1.38當此 context 中任何頁面中發生未處理的例外狀況時發出。若要監聽來自特定頁面的錯誤,請改用 page.on("pageerror")。
用法
browser_context.on("weberror", handler)
事件資料