Route
page.route() または browser_context.route() でネットワークルートが設定されるたびに、Route オブジェクトはそのルートを処理することを可能にします。
ネットワークについて詳しく学ぶ。
メソッド
abort
v1.9より前に追加ルートのリクエストを中止します。
使用法
route.abort()
route.abort(**kwargs)
引数
-
オプションのエラーコード。デフォルトは
failedで、以下のいずれかになります。'aborted'- 操作が中止されました(ユーザーアクションによる)'accessdenied'- ネットワーク以外のリソースへのアクセスが拒否されました'addressunreachable'- IPアドレスに到達できません。これは通常、指定されたホストまたはネットワークへのルートがないことを意味します。'blockedbyclient'- クライアントがリクエストをブロックすることを選択しました。'blockedbyresponse'- レスポンスが要件(例:'X-Frame-Options' や 'Content-Security-Policy' の祖先チェック)を満たさなかったため、リクエストが失敗しました。'connectionaborted'- 送信されたデータのACKを受信しなかった結果、接続がタイムアウトしました。'connectionclosed'- 接続が閉じられました(TCP FINに相当)。'connectionfailed'- 接続試行が失敗しました。'connectionrefused'- 接続試行が拒否されました。'connectionreset'- 接続がリセットされました(TCP RSTに相当)。'internetdisconnected'- インターネット接続が失われました。'namenotresolved'- ホスト名を解決できませんでした。'timedout'- 操作がタイムアウトしました。'failed'- 一般的な障害が発生しました。
戻り値
continue_
v1.9より前に追加オプションの上書きを用いて、ルートのリクエストをネットワークに送信します。
使用法
- 同期
- 非同期
def handle(route, request):
# override headers
headers = {
**request.headers,
"foo": "foo-value", # set "foo" header
"bar": None # remove "bar" header
}
route.continue_(headers=headers)
page.route("**/*", handle)
async def handle(route, request):
# override headers
headers = {
**request.headers,
"foo": "foo-value", # set "foo" header
"bar": None # remove "bar" header
}
await route.continue_(headers=headers)
await page.route("**/*", handle)
引数
-
headersDict[str, str] (オプション)#設定されている場合、リクエストHTTPヘッダーを変更します。ヘッダー値は文字列に変換されます。
-
設定されている場合、リクエストメソッド(例:GETまたはPOST)を変更します。
-
post_datastr | bytes | Dict (オプション)#設定されている場合、リクエストのPOSTデータを変更します。
-
設定されている場合、リクエストURLを変更します。新しいURLは元のURLと同じプロトコルである必要があります。
戻り値
詳細
headers オプションは、ルーティングされたリクエストと、それが開始するリダイレクトの両方に適用されます。ただし、url、method、および post_data は元のリクエストにのみ適用され、リダイレクトされたリクエストには引き継がれません。
route.continue_() はリクエストをすぐにネットワークに送信し、他のマッチするハンドラーは呼び出されません。チェーン内の次のマッチするハンドラーを呼び出したい場合は、route.fallback() を使用してください。
このメソッドを使用して Cookie ヘッダーを上書きすることはできません。値が指定されても無視され、クッキーはブラウザのクッキーストアから読み込まれます。カスタムクッキーを設定するには、browser_context.add_cookies() を使用してください。
fallback
追加日: v1.23オプションの上書きを用いて、ルートのリクエストを継続します。route.continue_() と似ていますが、リクエストを送信する前に他のマッチするハンドラーが呼び出される点が異なります。
使用法
与えられたパターンに複数のルートが一致する場合、それらは登録とは逆の順序で実行されます。これにより、最後に登録されたルートが常に以前のすべてのルートを上書きできます。以下の例では、リクエストはまず一番下のハンドラーによって処理され、次に前のハンドラーにフォールバックし、最終的には最初に登録されたルートによって中止されます。
- 同期
- 非同期
page.route("**/*", lambda route: route.abort()) # Runs last.
page.route("**/*", lambda route: route.fallback()) # Runs second.
page.route("**/*", lambda route: route.fallback()) # Runs first.
await page.route("**/*", lambda route: route.abort()) # Runs last.
await page.route("**/*", lambda route: route.fallback()) # Runs second.
await page.route("**/*", lambda route: route.fallback()) # Runs first.
複数のルートを登録することは、API呼び出しとページリソース、または以下の例のようにGETリクエストとPOSTリクエストなど、異なる種類のリクエストを異なるハンドラーで処理したい場合に役立ちます。
- 同期
- 非同期
# Handle GET requests.
def handle_get(route):
if route.request.method != "GET":
route.fallback()
return
# Handling GET only.
# ...
# Handle POST requests.
def handle_post(route):
if route.request.method != "POST":
route.fallback()
return
# Handling POST only.
# ...
page.route("**/*", handle_get)
page.route("**/*", handle_post)
# Handle GET requests.
async def handle_get(route):
if route.request.method != "GET":
await route.fallback()
return
# Handling GET only.
# ...
# Handle POST requests.
async def handle_post(route):
if route.request.method != "POST":
await route.fallback()
return
# Handling POST only.
# ...
await page.route("**/*", handle_get)
await page.route("**/*", handle_post)
後続のハンドラーにフォールバックしながらリクエストを変更することもできます。これにより、中間ルートハンドラーはリクエストのURL、メソッド、ヘッダー、およびpostDataを変更できます。
- 同期
- 非同期
def handle(route, request):
# override headers
headers = {
**request.headers,
"foo": "foo-value", # set "foo" header
"bar": None # remove "bar" header
}
route.fallback(headers=headers)
page.route("**/*", handle)
async def handle(route, request):
# override headers
headers = {
**request.headers,
"foo": "foo-value", # set "foo" header
"bar": None # remove "bar" header
}
await route.fallback(headers=headers)
await page.route("**/*", handle)
route.continue_() を使用してリクエストをすぐにネットワークに送信すると、その場合、他のマッチするハンドラーは呼び出されません。
引数
-
headersDict[str, str] (オプション)#設定されている場合、リクエストHTTPヘッダーを変更します。ヘッダー値は文字列に変換されます。
-
設定されている場合、リクエストメソッド(例:GETまたはPOST)を変更します。
-
post_datastr | bytes | Dict (オプション)#設定されている場合、リクエストのPOSTデータを変更します。
-
設定されている場合、リクエストURLを変更します。新しいURLは元のURLと同じプロトコルである必要があります。URLを変更してもルートのマッチングには影響しません。すべてのルートは元のリクエストURLを使用してマッチされます。
戻り値
fetch
追加: v1.29リクエストを実行し、応答を変更して満たすことができるように、応答を満たさずに結果を取得します。
使用法
- 同期
- 非同期
def handle(route):
response = route.fetch()
json = response.json()
json["message"]["big_red_dog"] = []
route.fulfill(response=response, json=json)
page.route("https://dog.ceo/api/breeds/list/all", handle)
async def handle(route):
response = await route.fetch()
json = await response.json()
json["message"]["big_red_dog"] = []
await route.fulfill(response=response, json=json)
await page.route("https://dog.ceo/api/breeds/list/all", handle)
引数
-
headersDict[str, str] (オプション)#設定されている場合、リクエストHTTPヘッダーを変更します。ヘッダー値は文字列に変換されます。
-
max_redirectsint (オプション)追加バージョン: v1.31#自動的にフォローされるリクエストのリダイレクトの最大数。この数を超えるとエラーがスローされます。デフォルトは
20です。リダイレクトをフォローしない場合は0を渡します。 -
max_retriesint (オプション)追加バージョン: v1.46#ネットワークエラーが再試行される最大回数。現在、
ECONNRESETエラーのみが再試行されます。HTTP応答コードに基づく再試行は行われません。制限を超えるとエラーがスローされます。デフォルトは0(再試行なし) です。 -
設定されている場合、リクエストメソッド(例:GETまたはPOST)を変更します。
-
post_datastr | bytes | Dict (オプション)#リクエストのPOSTデータを設定できます。データパラメータがオブジェクトの場合、JSON文字列にシリアル化され、明示的に設定されていない限り
content-typeヘッダーはapplication/jsonに設定されます。それ以外の場合、明示的に設定されていない限りcontent-typeヘッダーはapplication/octet-streamに設定されます。 -
timeoutfloat (オプション)追加バージョン: v1.33#リクエストのタイムアウト(ミリ秒単位)。デフォルトは
30000(30秒)です。タイムアウトを無効にするには0を渡します。 -
設定されている場合、リクエストURLを変更します。新しいURLは元のURLと同じプロトコルである必要があります。
戻り値
詳細
headers オプションは、フェッチされたリクエストと、それによって開始されたリダイレクトの両方に適用されることに注意してください。headers を元のリクエストにのみ適用し、リダイレクトには適用したくない場合は、代わりに route.continue_() を参照してください。
fulfill
v1.9より前に追加指定された応答でルートのリクエストを満たします。
使用法
すべてのリクエストを404応答で満たす例
- 同期
- 非同期
page.route("**/*", lambda route: route.fulfill(
status=404,
content_type="text/plain",
body="not found!"))
await page.route("**/*", lambda route: route.fulfill(
status=404,
content_type="text/plain",
body="not found!"))
静的ファイルを提供する例
- 同期
- 非同期
page.route("**/xhr_endpoint", lambda route: route.fulfill(path="mock_data.json"))
await page.route("**/xhr_endpoint", lambda route: route.fulfill(path="mock_data.json"))
引数
-
応答本文。
-
設定されている場合、
Content-Type応答ヘッダーの設定と同じです。 -
headersDict[str, str] (オプション)#応答ヘッダー。ヘッダー値は文字列に変換されます。
-
JSON応答。このメソッドは、設定されていない場合、コンテンツタイプを
application/jsonに設定します。 -
pathUnion[str, pathlib.Path] (オプション)#応答するファイルのパス。コンテンツタイプはファイル拡張子から推測されます。
pathが相対パスの場合、現在の作業ディレクトリを基準に解決されます。 -
responseAPIResponse (オプション)追加されたバージョン: v1.15#ルートのリクエストを満たすためのAPIResponse。応答の個々のフィールド(ヘッダーなど)は、fulfillオプションを使用して上書きできます。
-
応答ステータスコード。デフォルトは
200です。
戻り値
プロパティ
request
v1.9より前に追加ルーティングされるリクエスト。
使用法
route.request
戻り値