跳至主要内容

事件

简介

Playwright 允许监听网页上发生的各类事件,例如网络请求、子页面创建、专用工作线程等。有多种方式可以订阅这些事件,例如等待事件或添加/移除事件监听器。

等待事件

大多数情况下,脚本需要等待特定事件发生。以下是几种典型的事件等待模式。

使用page.expect_request()等待具有指定URL的请求:

with page.expect_request("**/*logo*.png") as first:
page.goto("https://wikipedia.org")
print(first.value.url)

等待弹出窗口:

with page.expect_popup() as popup:
page.get_by_text("open the popup").click()
popup.value.goto("https://wikipedia.org")

添加/移除事件监听器

有时,事件会在随机时间发生,与其等待它们,不如主动处理。Playwright支持传统的语言机制来订阅和取消订阅事件:

def print_request_sent(request):
print("Request sent: " + request.url)

def print_request_finished(request):
print("Request finished: " + request.url)

page.on("request", print_request_sent)
page.on("requestfinished", print_request_finished)
page.goto("https://wikipedia.org")

page.remove_listener("requestfinished", print_request_finished)
page.goto("https://www.openstreetmap.org/")

添加一次性监听器

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

page.once("dialog", lambda dialog: dialog.accept("2021"))
page.evaluate("prompt('Enter a number:')")