You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Playwright Python无法接受对话框,求替代解决方案

使用Playwright Python接受对话框的解决方案

你当前的代码问题在于使用了dialog.dismiss(),这个方法是取消/关闭对话框,而非接受。要实现接受对话框的操作,需要改用dialog.accept()。

修正后的全局监听方案

from playwright.sync_api import sync_playwright

def handle_dialog(dialog):
    print(dialog.message)
    dialog.accept()  # 替换dismiss()为accept()以接受对话框

def run(playwright):
    chromium = playwright.chromium
    browser = chromium.launch(headless=False)  # 关闭无头模式可直观查看效果
    page = browser.new_page()
    page.on("dialog", handle_dialog)  # 全局监听对话框事件
    page.evaluate("alert('1')")
    browser.close()

with sync_playwright() as playwright:
    run(playwright)

更精准的显式等待方案

如果只需要处理特定操作触发的对话框,推荐使用page.expect_dialog(),这种方式更精准,避免全局监听的潜在干扰:

from playwright.sync_api import sync_playwright

def run(playwright):
    chromium = playwright.chromium
    browser = chromium.launch(headless=False)
    page = browser.new_page()
    
    # 显式等待对话框弹出并处理
    with page.expect_dialog() as dialog_info:
        page.evaluate("alert('1')")
    dialog = dialog_info.value
    print(dialog.message)
    dialog.accept()
    
    browser.close()

with sync_playwright() as playwright:
    run(playwright)

两种方案的区别:

  • 全局监听(page.on):页面中所有对话框都会触发处理函数,适合需要统一处理所有对话框的场景;
  • 显式等待(page.expect_dialog):仅对包裹代码块内的操作触发的对话框生效,针对性更强,适合明确知道某个操作会弹出对话框的场景。

内容的提问来源于stack exchange,提问作者Abdul Rehman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 23:31:06