在剧作家中按下 "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
的东西。
我在 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
的东西。