事件监听
简介
Playwright 允许监听网页上发生的各类事件,例如网络请求、子页面创建、专用工作线程等。有多种方式可以订阅这些事件,包括等待事件发生或添加/移除事件监听器。
等待事件
大多数情况下,脚本需要等待特定事件发生。以下是几种典型的事件等待模式。
使用 page.waitForRequest() 等待指定 URL 的请求:
// 在跳转前开始等待请求。注意这里没有使用 await
const requestPromise = page.waitForRequest('**/*logo*.png');
await page.goto('https://wikipedia.org');
const request = await requestPromise;
console.log(request.url());
等待弹出窗口:
// 在点击前开始等待弹窗。注意这里没有使用 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.url()}`));
const listener = request => console.log(`请求已完成: ${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:')");