跳至主要内容

事件

介绍

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

添加一次性监听器

如果某个事件需要处理一次,有一个方便的 API 可以实现这一点。

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