在剧作家中按下 "cancel" 弹出按钮会引发异常

Pressing a "cancel" popup button in playwright throws exception

我在 python 中使用编剧来取消网页上的文本提交:

page.once("dialog", lambda dialog: asyncio.create_task(dialog.accept()))
with page.expect_navigation():
    page.click("text=\"Cancel\"")

然而这抛出:

Exception in callback SyncBase._sync.<locals>.callback(<Task finishe...> result=None>) at /home/.../venv/lib/python3.8/site-packages/playwright/sync_base.py:100
handle: <Handle SyncBase._sync.<locals>.callback(<Task finishe...> result=None>) at /home/.../venv/lib/python3.8/site-packages/playwright/sync_base.py:100>
Traceback (most recent call last):
  File "/usr/lib/python3.8/asyncio/events.py", line 81, in _run
    self._context.run(self._callback, *self._args)
...
TypeError: a coroutine was expected, got None

代码工作正常,取消得到正确确认 - 但是如果知道我在这里做错了什么以及如何修复它会很高兴。

而不是:

page.once("dialog", lambda dialog: asyncio.create_task(dialog.accept()))

显然应该是:

page.once("dialog", lambda dialog: dialog.accept())

这基本上是一个幸运的猜测,所以请持保留态度。我找不到好的来源来备份它。

在撰写本文时,Playwright Python 版本的 documentation 似乎根本没有提及 page.once()

在 Playwright 的原始 JavaScript 版本中,page.once() 被记录为标准 Node.js EventEmitter class 的一部分,其中 Page 是派生的。 Python 标准库中不存在类似 EventEmitter 的东西。