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)
引数
-
headers
Dict[str, str] (オプション)#設定されている場合、リクエストの HTTP ヘッダーを変更します。ヘッダー値は文字列に変換されます。
-
設定されている場合、リクエストメソッド (例: GET または POST) を変更します。
-
post_data
str | bytes | Dict (オプション)#設定されている場合、リクエストのポストデータを変更します。
-
設定されている場合、リクエスト URL を変更します。新しい URL は元の URL と同じプロトコルである必要があります。
戻り値
詳細
headers オプションは、ルーティングされたリクエストと、それが開始するすべてのリダイレクトの両方に適用されます。ただし、url、method、および post_data は、元のリクエストにのみ適用され、リダイレクトされたリクエストには引き継がれません。
route.continue_() は、リクエストをすぐにネットワークに送信し、他の一致するハンドラーは呼び出されません。チェーン内の次の一致するハンドラーを呼び出す場合は、route.fallback() を使用してください。
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、method、headers、および 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_() を使用してください。その場合、他の一致するハンドラーは呼び出されません。
引数
-
headers
Dict[str, str] (オプション)#設定されている場合、リクエストの HTTP ヘッダーを変更します。ヘッダー値は文字列に変換されます。
-
設定されている場合、リクエストメソッド (例: GET または POST) を変更します。
-
post_data
str | bytes | Dict (オプション)#設定されている場合、リクエストのポストデータを変更します。
-
設定されている場合、リクエスト URL を変更します。新しい URL は元の URL と同じプロトコルである必要があります。URL を変更してもルートマッチングには影響しません。すべてのルートは元のリクエスト URL を使用してマッチングされます。
戻り値
fetch
追加バージョン: v1.29リクエストを実行して、レスポンスを変更してから fulfill できるように、fulfill せずに結果を取得します。
使用方法
- 同期
- 非同期
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)
引数
-
headers
Dict[str, str] (オプション)#設定されている場合、リクエストの HTTP ヘッダーを変更します。ヘッダー値は文字列に変換されます。
-
max_redirects
int (オプション)追加バージョン: v1.31#自動的に追跡されるリクエストリダイレクトの最大数。数を超えるとエラーがスローされます。デフォルトは
20
です。リダイレクトを追跡しない場合は0
を渡します。 -
max_retries
int (オプション)追加バージョン: v1.46#ネットワークエラーを再試行する最大回数。現在、
ECONNRESET
エラーのみが再試行されます。HTTP レスポンスコードに基づいて再試行しません。制限を超えるとエラーがスローされます。デフォルトは0
- 再試行なし。 -
設定されている場合、リクエストメソッド (例: GET または POST) を変更します。
-
post_data
str | bytes | Dict (オプション)#リクエストのポストデータを設定できます。data パラメーターがオブジェクトの場合、json 文字列にシリアル化され、
content-type
ヘッダーが明示的に設定されていない場合はapplication/json
に設定されます。それ以外の場合、content-type
ヘッダーは明示的に設定されていない場合はapplication/octet-stream
に設定されます。 -
timeout
float (オプション)追加バージョン: v1.33#リクエストタイムアウト(ミリ秒単位)。デフォルトは
30000
(30 秒) です。タイムアウトを無効にするには0
を渡します。 -
設定されている場合、リクエスト URL を変更します。新しい URL は元の URL と同じプロトコルである必要があります。
戻り値
詳細
headers オプションは、フェッチされたリクエストと、それによって開始されるすべてのリダイレクトに適用されることに注意してください。headers を元のリクエストにのみ適用し、リダイレクトには適用しない場合は、代わりに route.continue_() を検討してください。
fulfill
v1.9 より前に追加指定されたレスポンスでルートのリクエストを fulfill します。
使用方法
すべてのリクエストを 404 レスポンスで fulfill する例
- 同期
- 非同期
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
レスポンスヘッダーの設定と同じです。 -
headers
Dict[str, str] (オプション)#レスポンスヘッダー。ヘッダー値は文字列に変換されます。
-
json
Dict (オプション)追加バージョン: v1.29#JSON レスポンス。このメソッドは、コンテンツタイプが設定されていない場合は
application/json
に設定します。 -
path
Union[str, pathlib.Path] (オプション)#応答するファイルパス。コンテンツタイプはファイル拡張子から推測されます。
path
が相対パスの場合、現在の作業ディレクトリに対する相対パスとして解決されます。 -
response
APIResponse (オプション)追加バージョン: v1.15#ルートのリクエストを fulfill する APIResponse。レスポンスの個々のフィールド (ヘッダーなど) は、fulfill オプションを使用してオーバーライドできます。
-
レスポンスステータスコード。デフォルトは
200
です。
戻り値
プロパティ
request
v1.9 より前に追加ルーティングされるリクエスト。
使用方法
route.request
戻り値