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()
戻り値
- Dict#
-
requestBodySize
intリクエストボディ(POSTデータペイロード)のサイズ(バイト単位)。ボディがない場合は0に設定されます。
-
requestHeadersSize
intHTTPリクエストメッセージの先頭から、ボディの前の二重CRLF(キャリッジリターンとラインフィード)まで(両端を含む)の合計バイト数。
-
responseBodySize
int受信したレスポンスボディのサイズ(エンコード済み、バイト単位)。
-
responseHeadersSize
intHTTPレスポンスメッセージの先頭から、ボディの前の二重CRLF(キャリッジリターンとラインフィード)まで(両端を含む)の合計バイト数。
-
プロパティ
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関連のものを含むセキュリティ関連のヘッダーを返さないことに注意してください。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
にリダイレクトする場合
- Sync
- Async
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
にリダイレクトがない場合
- Sync
- Async
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を参照してください。
使用法
- Sync
- Async
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
戻り値