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 (オプション)#設定されている場合、リクエストの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_()
を使用すると、リクエストはすぐにネットワークに送信され、その場合、他のマッチするハンドラーは呼び出されません。
引数
-
headers
Dict[str, str] (オプション)#設定されている場合、リクエストのHTTPヘッダーを変更します。ヘッダーの値は文字列に変換されます。
-
設定されている場合、リクエストメソッド(例:GETまたはPOST)を変更します。
-
post_data
str | 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)
引数
-
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 (オプション)#リクエストのPOSTデータを設定できます。データパラメータがオブジェクトの場合、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より前に追加与えられたレスポンスでルートのリクエストをフルフィルします。
使い方
すべてのリクエストを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
レスポンスヘッダーの設定と同等です。 -
headers
Dict[str, str] (オプション)#レスポンスヘッダー。ヘッダーの値は文字列に変換されます。
-
json
Dict (オプション)追加バージョン: v1.29#JSONレスポンス。このメソッドは、
content type
が設定されていない場合、application/json
に設定します。 -
path
Union[str, pathlib.Path] (オプション)#応答するファイルのパス。コンテンツタイプはファイル拡張子から推測されます。
path
が相対パスの場合、現在の作業ディレクトリを基準に解決されます。 -
response
APIResponse (オプション)追加バージョン: v1.15#ルートのリクエストをフルフィルするための APIResponse。レスポンスの個々のフィールド(ヘッダーなど)は、フルフィルオプションを使用して上書きできます。
-
レスポンスステータスコード、デフォルトは
200
。
戻り値
プロパティ
request
v1.9より前に追加ルーティングされるリクエスト。
使い方
route.request
戻り値