首页 > 解决方案 > 在剧作家中按下“取消”弹出按钮会引发异常

问题描述

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

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

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

标签: pythonplaywright

解决方案


代替:

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

显然应该只是:

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

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

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

在 Playwright 的原始 JavaScript 版本中,page.once()被记录为标准 Node.jsEventEmitter类的一部分,从该类Page派生。EventEmitter但是,Python 标准库中没有类似的东西。


推荐阅读