Route
page.route() または browserContext.route() でネットワークルートが設定されるたびに、Route
オブジェクトはそのルートを処理することができます。
ネットワークについて詳しく学ぶ。
メソッド
abort
v1.9より前に追加ルートのリクエストを中止します。
使用法
await route.abort();
await route.abort(errorCode);
引数
-
オプションのエラーコード。デフォルトは
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より前に追加オプションのオーバーライドを使用して、ルートのリクエストをネットワークに送信します。
使用法
await page.route('**/*', async (route, request) => {
// Override headers
const headers = {
...request.headers(),
foo: 'foo-value', // set "foo" header
bar: undefined, // remove "bar" header
};
await route.continue({ headers });
});
引数
options
Object (省略可能)
戻り値
詳細
headers
オプションは、ルーティングされたリクエストとそのリクエストが開始するリダイレクトの両方に適用されます。しかし、url
、method
、postData
は元のリクエストにのみ適用され、リダイレクトされたリクエストには引き継がれません。
route.continue()
はリクエストを即座にネットワークに送信し、他のマッチするハンドラーは呼び出されません。チェーン内の次のマッチするハンドラーを呼び出したい場合は、route.fallback()
を使用してください。
このメソッドではCookie
ヘッダーを上書きすることはできません。値が提供されても無視され、クッキーはブラウザのクッキーストアから読み込まれます。カスタムクッキーを設定するには、browserContext.addCookies()
を使用してください。
fallback
追加バージョン: v1.23オプションのオーバーライドを使用してルートのリクエストを継続します。このメソッドはroute.continue()
に似ていますが、リクエストを送信する前に他のマッチするハンドラーが呼び出される点が異なります。
使用法
複数のルートが指定されたパターンにマッチする場合、それらは登録とは逆の順序で実行されます。これにより、最後に登録されたルートが常にそれまでのすべてのルートを上書きできます。以下の例では、リクエストはまず一番下のハンドラーによって処理され、その後前のハンドラーにフォールバックし、最終的に最初に登録されたルートによって中止されます。
await page.route('**/*', async route => {
// Runs last.
await route.abort();
});
await page.route('**/*', async route => {
// Runs second.
await route.fallback();
});
await page.route('**/*', async route => {
// Runs first.
await route.fallback();
});
複数のルートを登録することは、異なる種類のリクエスト、例えばAPI呼び出しとページリソース、または以下の例のようにGETリクエストとPOSTリクエストを別々のハンドラーで処理したい場合に役立ちます。
// Handle GET requests.
await page.route('**/*', async route => {
if (route.request().method() !== 'GET') {
await route.fallback();
return;
}
// Handling GET only.
// ...
});
// Handle POST requests.
await page.route('**/*', async route => {
if (route.request().method() !== 'POST') {
await route.fallback();
return;
}
// Handling POST only.
// ...
});
また、後続のハンドラーにフォールバックしながらリクエストを変更することもできます。これにより、中間ルートハンドラーがリクエストのURL、メソッド、ヘッダー、およびポストデータを変更できます。
await page.route('**/*', async (route, request) => {
// Override headers
const headers = {
...request.headers(),
foo: 'foo-value', // set "foo" header
bar: undefined, // remove "bar" header
};
await route.fallback({ headers });
});
リクエストを即座にネットワークに送信し、他のマッチするハンドラーを呼び出したくない場合は、route.continue()
を使用してください。
引数
options
Object (省略可能)-
headers
Object<string, string> (省略可能)#設定されている場合、リクエストのHTTPヘッダーを変更します。ヘッダー値は文字列に変換されます。
-
設定されている場合、リクエストメソッド(例: GETまたはPOST)を変更します。
-
postData
string | Buffer | Serializable (省略可能)#設定されている場合、リクエストのポストデータを変更します。
-
設定されている場合、リクエストURLを変更します。新しいURLは元のURLと同じプロトコルである必要があります。URLを変更してもルートのマッチングには影響せず、すべてのルートは元のリクエストURLを使用してマッチされます。
-
戻り値
fetch
追加バージョン: v1.29リクエストを実行し、フルフィルすることなく結果をフェッチします。これにより、レスポンスを変更してからフルフィルすることができます。
使用法
await page.route('https://dog.ceo/api/breeds/list/all', async route => {
const response = await route.fetch();
const json = await response.json();
json.message['big_red_dog'] = [];
await route.fulfill({ response, json });
});
引数
options
Object (省略可能)-
headers
Object<string, string> (省略可能)#設定されている場合、リクエストのHTTPヘッダーを変更します。ヘッダー値は文字列に変換されます。
-
maxRedirects
number (省略可能)追加バージョン: v1.31#自動的に追従されるリクエストリダイレクトの最大数。この数を超えるとエラーがスローされます。デフォルトは
20
です。0
を渡すとリダイレクトを追従しません。 -
maxRetries
number (省略可能)追加バージョン: v1.46#ネットワークエラーが再試行される最大回数。現在、
ECONNRESET
エラーのみが再試行されます。HTTPレスポンスコードに基づいて再試行は行われません。制限を超えるとエラーがスローされます。デフォルトは0
- 再試行なし。 -
設定されている場合、リクエストメソッド(例: GETまたはPOST)を変更します。
-
postData
string | Buffer | Serializable (省略可能)#リクエストのポストデータを設定できます。データパラメータがオブジェクトの場合、JSON文字列にシリアライズされ、明示的に設定されていない限り
content-type
ヘッダーはapplication/json
に設定されます。それ以外の場合、明示的に設定されていない限りcontent-type
ヘッダーはapplication/octet-stream
に設定されます。 -
timeout
number (省略可能)追加バージョン: v1.33#ミリ秒単位のリクエストタイムアウト。デフォルトは
30000
(30秒)です。0
を渡すとタイムアウトを無効にします。 -
設定されている場合、リクエストURLを変更します。新しいURLは元のURLと同じプロトコルである必要があります。
-
戻り値
詳細
headers
オプションは、フェッチされたリクエストと、それによって開始されるすべてのリダイレクトの両方に適用されることに注意してください。headers
を元のリクエストにのみ適用し、リダイレクトには適用したくない場合は、代わりにroute.continue()
を検討してください。
fulfill
v1.9より前に追加指定されたレスポンスでルートのリクエストをフルフィルします。
使用法
すべてのリクエストを404レスポンスでフルフィルする例
await page.route('**/*', async route => {
await route.fulfill({
status: 404,
contentType: 'text/plain',
body: 'Not Found!'
});
});
静的ファイルを配信する例
await page.route('**/xhr_endpoint', route => route.fulfill({ path: 'mock_data.json' }));
引数
options
Object (省略可能)-
レスポンスボディ。
-
設定されている場合、
Content-Type
レスポンスヘッダーの設定と同じです。 -
headers
Object<string, string> (省略可能)#レスポンスヘッダー。ヘッダー値は文字列に変換されます。
-
json
Serializable (省略可能)追加バージョン: v1.29#JSONレスポンス。このメソッドは、コンテンツタイプが設定されていない場合、
application/json
に設定します。 -
レスポンスとして使用するファイルパス。コンテンツタイプはファイル拡張子から推測されます。
path
が相対パスの場合、現在の作業ディレクトリを基準に解決されます。 -
response
APIResponse (省略可能)追加バージョン: v1.15#ルートのリクエストをフルフィルするために使用するAPIResponse。レスポンスの個々のフィールド(ヘッダーなど)は、フルフィルオプションを使用して上書きできます。
-
レスポンスステータスコード。デフォルトは
200
です。
-
戻り値
request
v1.9より前に追加ルーティングされるリクエスト。
使用法
route.request();
戻り値