Request
ページがネットワークリソースへのリクエストを送信するたびに、Page によって以下のイベントシーケンスが発火します。
- ページによってリクエストが発行されたときに発火する page.on("request")。
- リクエストに対するレスポンスステータスとヘッダーが受信されたときに発火する page.on("response")。
- レスポンスボディがダウンロードされ、リクエストが完了したときに発火する page.on("requestfinished")。
リクエストが途中で失敗した場合、`requestfinished` イベント (場合によっては 'response' イベント) の代わりに、page.on("requestfailed") イベントが発火します。
404や503などのHTTPエラーレスポンスは、HTTPの観点からは依然として成功したレスポンスであるため、リクエストは `requestfinished` イベントで完了します。
リクエストが 'redirect' レスポンスを受け取った場合、リクエストは `requestfinished` イベントで正常に完了し、リダイレクトされたURLに対して新しいリクエストが発行されます。
メソッド
all_headers
追加バージョン: v1.15このリクエストに関連付けられたすべてのHTTPリクエストヘッダーを含むオブジェクトです。ヘッダー名は小文字化されます。
使い方
request.all_headers()
戻り値
header_value
追加バージョン: v1.15名前に一致するヘッダーの値を返します。名前は大文字と小文字を区別しません。
使い方
request.header_value(name)
引数
戻り値
headers_array
追加バージョン: v1.15このリクエストに関連付けられたすべてのHTTPリクエストヘッダーを含む配列です。request.all_headers() とは異なり、ヘッダー名が小文字化されることはありません。Set-Cookie
のように複数のエントリを持つヘッダーは、配列内に複数回出現します。
使い方
request.headers_array()
戻り値
response
追加バージョン: v1.9以前一致する Response オブジェクトを返します。エラーのためにレスポンスが受信されなかった場合は `null` を返します。
使い方
request.response()
戻り値
sizes
追加バージョン: v1.15指定されたリクエストのリソースサイズ情報を返します。
使い方
request.sizes()
戻り値
プロパティ
failure
追加バージョン: v1.9以前このリクエストが `requestfailed` イベントによって報告されたように失敗しない限り、このメソッドは `null` を返します。
使い方
失敗したすべてのリクエストをログに記録する例
page.on("requestfailed", lambda request: print(request.url + " " + request.failure))
戻り値
frame
追加バージョン: v1.9以前このリクエストを開始した Frame を返します。
使い方
frame_url = request.frame.url
戻り値
詳細
場合によってはフレームが利用できず、このメソッドが例外をスローすることに注意してください。
- Service Workerでリクエストが発生した場合。これを確認するには `request.serviceWorker()` を使用できます。
- 対応するフレームが作成される前にナビゲーションリクエストが発行された場合。これを確認するには request.is_navigation_request() を使用できます。
すべてのケースを処理する例はこちらです
headers
追加バージョン: v1.9以前リクエストHTTPヘッダーを含むオブジェクトです。ヘッダー名は小文字化されます。このメソッドは、クッキー関連のヘッダーを含むセキュリティ関連のヘッダーを返さないことに注意してください。`cookie` 情報を含むヘッダーの完全なリストについては、request.all_headers() を使用できます。
使い方
request.headers
戻り値
is_navigation_request
追加バージョン: v1.9以前このリクエストがフレームのナビゲーションを駆動しているかどうか。
一部のナビゲーションリクエストは、対応するフレームが作成される前に発行されるため、request.frame が利用できません。
使い方
request.is_navigation_request()
戻り値
method
追加バージョン: v1.9以前リクエストのメソッド (GET、POSTなど)。
使い方
request.method
戻り値
post_data
追加バージョン: v1.9以前リクエストのPOSTボディ (存在する場合)。
使い方
request.post_data
戻り値
post_data_buffer
追加バージョン: v1.9以前リクエストのPOSTボディのバイナリ形式 (存在する場合)。
使い方
request.post_data_buffer
戻り値
post_data_json
追加バージョン: v1.9以前`form-urlencoded` のリクエストボディをパースして返します。存在しない場合はJSONとしてパースを試みます。
レスポンスが `application/x-www-form-urlencoded` の場合、値のキー/バリューオブジェクトが返されます。それ以外の場合はJSONとしてパースされます。
使い方
request.post_data_json
戻り値
redirected_from
追加バージョン: v1.9以前サーバーによってこのリクエストにリダイレクトされたリクエスト (存在する場合)。
サーバーがリダイレクトで応答すると、Playwright は新しい Request オブジェクトを作成します。2つのリクエストは `redirectedFrom()` および `redirectedTo()` メソッドによって接続されます。複数のサーバーリダイレクトが発生した場合、`redirectedFrom()` を繰り返し呼び出すことで、完全なリダイレクトチェーンを構築できます。
使い方
例えば、ウェブサイト `http://example.com` が `https://example.com` にリダイレクトする場合
- 同期
- 非同期
response = page.goto("http://example.com")
print(response.request.redirected_from.url) # "http://example.com"
response = await page.goto("http://example.com")
print(response.request.redirected_from.url) # "http://example.com"
もしウェブサイト `https://google.com` にリダイレクトがない場合
- 同期
- 非同期
response = page.goto("https://google.com")
print(response.request.redirected_from) # None
response = await page.goto("https://google.com")
print(response.request.redirected_from) # None
戻り値
redirected_to
追加バージョン: v1.9以前サーバーがリダイレクトで応答した場合、ブラウザによって発行された新しいリクエスト。
使い方
このメソッドは request.redirected_from の反対です。
assert request.redirected_from.redirected_to == request
戻り値
resource_type
追加バージョン: v1.9以前レンダリングエンジンによって認識されたリクエストのリソースタイプを含みます。ResourceType は以下のいずれかになります: `document`、`stylesheet`、`image`、`media`、`font`、`script`、`texttrack`、`xhr`、`fetch`、`eventsource`、`websocket`、`manifest`、`other`。
使い方
request.resource_type
戻り値
timing
追加バージョン: v1.9以前指定されたリクエストのリソースタイミング情報を返します。ほとんどのタイミング値はレスポンス時に利用可能になり、`responseEnd` はリクエストが完了したときに利用可能になります。詳細については Resource Timing API を参照してください。
使い方
- 同期
- 非同期
with page.expect_event("requestfinished") as request_info:
page.goto("http://example.com")
request = request_info.value
print(request.timing)
async with page.expect_event("requestfinished") as request_info:
await page.goto("http://example.com")
request = await request_info.value
print(request.timing)
戻り値
- Dict#
-
startTime
float1970年1月1日00:00:00 UTCからの経過ミリ秒単位でのリクエスト開始時刻
-
domainLookupStart
floatブラウザがリソースのドメイン名ルックアップを開始する直前の時刻。値は `startTime` を基準としたミリ秒単位で、利用できない場合は -1 です。
-
domainLookupEnd
floatブラウザがリソースのドメイン名ルックアップを終了した直後の時刻。値は `startTime` を基準としたミリ秒単位で、利用できない場合は -1 です。
-
connectStart
floatユーザーエージェントがリソースを取得するためにサーバーへの接続確立を開始する直前の時刻。値は `startTime` を基準としたミリ秒単位で、利用できない場合は -1 です。
-
secureConnectionStart
floatブラウザが現在の接続を保護するためのハンドシェイクプロセスを開始する直前の時刻。値は `startTime` を基準としたミリ秒単位で、利用できない場合は -1 です。
-
connectEnd
floatユーザーエージェントがリソースを取得するためにサーバーへの接続確立を開始する直前の時刻。値は `startTime` を基準としたミリ秒単位で、利用できない場合は -1 です。
-
requestStart
floatブラウザがサーバー、キャッシュ、またはローカルリソースからリソースの要求を開始する直前の時刻。値は `startTime` を基準としたミリ秒単位で、利用できない場合は -1 です。
-
responseStart
floatブラウザがサーバー、キャッシュ、またはローカルリソースからレスポンスの最初のバイトを受信した直後の時刻。値は `startTime` を基準としたミリ秒単位で、利用できない場合は -1 です。
-
responseEnd
floatブラウザがリソースの最後のバイトを受信した直後、またはトランスポート接続が閉じる直前 (いずれか早い方) の時刻。値は `startTime` を基準としたミリ秒単位で、利用できない場合は -1 です。
-
url
追加バージョン: v1.9以前リクエストのURL。
使い方
request.url
戻り値