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

イベント

はじめに

Playwright では、ネットワークリクエスト、子ページの作成、専用ワーカーなど、ウェブページ上で発生する様々な種類のイベントをリッスンできます。イベントを待機したり、イベントリスナーを追加または削除するなど、このようなイベントをサブスクライブする方法はいくつかあります。

イベントの待機

ほとんどの場合、スクリプトは特定のイベントが発生するのを待つ必要があります。以下に、一般的なイベント待機パターンをいくつか示します。

page.waitForRequest() を使用して、指定された URL のリクエストを待機します

// Start waiting for request before goto. Note no await.
const requestPromise = page.waitForRequest('**/*logo*.png');
await page.goto('https://wikipedia.org');
const request = await requestPromise;
console.log(request.url());

ポップアップウィンドウを待機

// Start waiting for popup before clicking. Note no await.
const popupPromise = page.waitForEvent('popup');
await page.getByText('open the popup').click();
const popup = await popupPromise;
await popup.goto('https://wikipedia.org');

イベントリスナーの追加/削除

イベントはランダムなタイミングで発生することがあり、待機するのではなく、処理する必要があります。Playwright は、イベントのサブスクライブとサブスクライブ解除のための従来の言語メカニズムをサポートしています。

page.on('request', request => console.log(`Request sent: ${request.url()}`));
const listener = request => console.log(`Request finished: ${request.url()}`);
page.on('requestfinished', listener);
await page.goto('https://wikipedia.org');

page.off('requestfinished', listener);
await page.goto('https://www.openstreetmap.org/');

1 回限りのリスナーの追加

特定のイベントを一度だけ処理する必要がある場合、便利な API があります。

page.once('dialog', dialog => dialog.accept('2021'));
await page.evaluate("prompt('Enter a number:')");