Skip to main content

事件

簡介

Playwright 允許監聽網頁上發生的各種類型事件,例如網路請求、子頁面的建立、專用工作者等。有幾種方式可以訂閱此類事件,例如等待事件或添加或移除事件監聽器。

等待事件

大多數情況下,腳本需要等待特定事件發生。以下是一些典型的事件等待模式。

等待具有指定 url 的請求,使用 page.waitForRequest()

// 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/');

添加一次性監聽器

如果某個事件需要處理一次,有一個方便的 API 可以使用:

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