python - 在剧作家中按下“取消”弹出按钮会引发异常
问题描述
我在 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
代码工作正常,取消得到正确确认 - 但是很高兴知道我在这里做错了什么以及如何解决它。
解决方案
代替:
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 标准库中没有类似的东西。
推荐阅读
- jquery - 如何将输入的值放入表中的一组输入中使用jquery
- c++ - Ubuntu c++:同时显示 3D 网格和 2D 图像的最简单方法?
- php - php碳计数日期范围内的天数
- java - 注释属性 Query.value 的值必须是常量表达式
- python - 错误:除非设置了“otypes”,否则无法在大小为 0 的输入上调用“vectorize”
- solr - 基于solr中的搜索词对solr文档进行排序
- javascript - 如果子字符串前面没有特定字符串,则正则表达式匹配子字符串并忽略整个字符串?
- java - java 到达黄瓜中的场景后如何关闭浏览器,我的代码不起作用
- reactjs - 如何获取 Material UI Icon SVG 路径?React 图标选择器
- c++ - 无效的用户定义转换:C++ 错误