メインコンテンツにスキップ

Route

page.route() または browser_context.route() でネットワークルートが設定されるたびに、Route オブジェクトはルートを処理することを可能にします。

ネットワークについて詳しく学ぶ。


メソッド

abort

v1.9より前に追加 route.abort

ルートのリクエストを中止します。

使い方

route.abort()
route.abort(**kwargs)

引数

  • error_code str (オプション)#

    オプションのエラーコード。デフォルトは 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より前に追加 route.continue_

オプションの上書きを指定して、ルートのリクエストをネットワークに送信します。

使い方

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)

引数

  • headers Dict[str, str] (オプション)#

    設定されている場合、リクエストのHTTPヘッダーを変更します。ヘッダーの値は文字列に変換されます。

  • method str (オプション)#

    設定されている場合、リクエストメソッド(例:GETまたはPOST)を変更します。

  • post_data str | bytes | Dict (オプション)#

    設定されている場合、リクエストのPOSTデータを変更します。

  • url str (オプション)#

    設定されている場合、リクエストURLを変更します。新しいURLは元のURLと同じプロトコルである必要があります。

戻り値

詳細

headers オプションは、ルーティングされたリクエストと、それによって開始されるすべてのリダイレクトの両方に適用されます。ただし、urlmethod、および post_data は元のリクエストにのみ適用され、リダイレクトされたリクエストには引き継がれません。

route.continue_() はリクエストをすぐにネットワークに送信し、他のマッチングするハンドラーは呼び出されません。チェーン内の次のマッチングするハンドラーを呼び出したい場合は、route.fallback() を使用してください。

警告

このメソッドでは Cookie ヘッダーを上書きできません。値が指定されても無視され、クッキーはブラウザのクッキーストアからロードされます。カスタムクッキーを設定するには、browser_context.add_cookies() を使用してください。


fallback

追加バージョン: v1.23 route.fallback

オプションの上書きを指定して、ルートのリクエストを続行します。このメソッドは 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.

複数のルートを登録することは、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)

また、後続のハンドラーにフォールバックしながらリクエストを変更することもできます。これにより、中間ルートハンドラーはリクエストの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)

route.continue_() を使用すると、リクエストはすぐにネットワークに送信され、その場合、他のマッチするハンドラーは呼び出されません。

引数

  • headers Dict[str, str] (オプション)#

    設定されている場合、リクエストのHTTPヘッダーを変更します。ヘッダーの値は文字列に変換されます。

  • method str (オプション)#

    設定されている場合、リクエストメソッド(例:GETまたはPOST)を変更します。

  • post_data str | bytes | Dict (オプション)#

    設定されている場合、リクエストのPOSTデータを変更します。

  • url str (オプション)#

    設定されている場合、リクエストURLを変更します。新しいURLは元のURLと同じプロトコルである必要があります。URLを変更してもルートのマッチングには影響せず、すべてのルートは元のリクエストURLを使用してマッチングされます。

戻り値


fetch

追加バージョン: v1.29 route.fetch

リクエストを実行し、結果をフルフィルすることなくフェッチします。これにより、レスポンスを変更してからフルフィルすることができます。

使い方

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)

引数

  • headers Dict[str, str] (オプション)#

    設定されている場合、リクエストのHTTPヘッダーを変更します。ヘッダーの値は文字列に変換されます。

  • max_redirects int (オプション)追加バージョン: v1.31#

    自動的に追跡されるリクエストのリダイレクトの最大数。この数を超えるとエラーがスローされます。デフォルトは 20 です。リダイレクトを追跡しない場合は 0 を渡します。

  • max_retries int (オプション)追加バージョン: v1.46#

    ネットワークエラーを再試行する最大回数。現在、ECONNRESET エラーのみが再試行されます。HTTP レスポンスコードに基づく再試行は行いません。この制限を超えるとエラーがスローされます。デフォルトは 0 (再試行なし) です。

  • method str (オプション)#

    設定されている場合、リクエストメソッド(例:GETまたはPOST)を変更します。

  • post_data str | bytes | Dict (オプション)#

    リクエストのPOSTデータを設定できます。データパラメータがオブジェクトの場合、JSON文字列にシリアライズされ、明示的に設定されていない場合は content-type ヘッダーが application/json に設定されます。それ以外の場合は、明示的に設定されていない限り content-type ヘッダーが application/octet-stream に設定されます。

  • timeout float (オプション)追加バージョン: v1.33#

    ミリ秒単位のリクエストタイムアウト。デフォルトは 30000 (30秒) です。タイムアウトを無効にするには 0 を渡します。

  • url str (オプション)#

    設定されている場合、リクエストURLを変更します。新しいURLは元のURLと同じプロトコルである必要があります。

戻り値

詳細

headers オプションは、フェッチされたリクエストと、それによって開始されたすべてのリダイレクトに適用されることに注意してください。headers を元のリクエストにのみ適用し、リダイレクトには適用しない場合は、代わりに route.continue_() を参照してください。


fulfill

v1.9より前に追加 route.fulfill

与えられたレスポンスでルートのリクエストをフルフィルします。

使い方

すべてのリクエストを404レスポンスでフルフィルする例

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"))

引数

  • body str | bytes (オプション)#

    レスポンスボディ。

  • content_type str (オプション)#

    設定されている場合、Content-Type レスポンスヘッダーの設定と同等です。

  • headers Dict[str, str] (オプション)#

    レスポンスヘッダー。ヘッダーの値は文字列に変換されます。

  • json Dict (オプション)追加バージョン: v1.29#

    JSONレスポンス。このメソッドは、content type が設定されていない場合、application/json に設定します。

  • path Union[str, pathlib.Path] (オプション)#

    応答するファイルのパス。コンテンツタイプはファイル拡張子から推測されます。path が相対パスの場合、現在の作業ディレクトリを基準に解決されます。

  • response APIResponse (オプション)追加バージョン: v1.15#

    ルートのリクエストをフルフィルするための APIResponse。レスポンスの個々のフィールド(ヘッダーなど)は、フルフィルオプションを使用して上書きできます。

  • status int (オプション)#

    レスポンスステータスコード、デフォルトは 200

戻り値


プロパティ

request

v1.9より前に追加 route.request

ルーティングされるリクエスト。

使い方

route.request

戻り値