Playwright循环中处理弹窗超时问题求助
解决Playwright循环处理弹窗时的超时问题
核心问题分析
你遇到的问题根源在于异常捕获范围错误或未主动控制弹窗等待逻辑:
- Playwright抛出的
TimeoutError是专属异常类,并非Python内置的TimeoutError,直接用except TimeoutError:无法捕获。 - 若直接调用
page.click("text=Yes"),方法默认会无限等待元素出现,无弹窗时必然触发超时终止。
解决方案
1. 捕获正确的异常类
先导入Playwright专属的TimeoutError,再在异常捕获逻辑中使用:
from playwright._impl._errors import TimeoutError # 循环处理公寓单元 for unit in apartment_units: # 执行进入单元详情等前置操作 try: # 尝试点击弹窗的Yes按钮,设置2秒超时 page.click("text=Yes", timeout=2000) except TimeoutError: # 无弹窗时跳过,继续执行后续逻辑 pass
2. 更稳妥的弹窗检测方式
用page.wait_for_selector()主动检测弹窗是否存在,配合超时参数避免无效等待:
from playwright._impl._errors import TimeoutError for unit in apartment_units: # 进入单元详情页的操作 try: # 等待弹窗标题出现,超时2秒 page.wait_for_selector("text=Change Desired Move-in Date", state="visible", timeout=2000) # 确认弹窗存在后点击Yes page.click("text=Yes") except TimeoutError: # 无弹窗,直接处理下一个单元 continue
3. 额外注意事项
- 如果循环中涉及页面跳转(比如从列表页进入详情页),确保操作的是当前活跃页面,可通过
context.pages[-1]获取最新页面实例。 - 避免复用全局
page对象,多页面切换时需及时更新操作的页面引用。
内容的提问来源于stack exchange,提问作者iron502
相关产品推荐
相关产品推荐

