破障篇-Day17|弹窗驱散咒:处理 alert、confirm 网页弹窗

0 次阅读 2026-10-20 16:31

📖 知识点

1. 弹窗分类

网页常见原生弹窗有三种,都源于浏览器的 alert / confirm / prompt:

弹窗用途常见按钮
alert单纯提示信息只有一个 "确定"
confirm询问确认"确定" + "取消"
prompt让用户输入输入框 + "确定 / 取消"

2. 用 listen 监听弹窗

DrissionPage 的做法:先让页面监听弹窗,等弹窗出现时自动处理,不打断流程:

# 开启弹窗监听
page.listen.start("")   # 监听所有弹窗

实际常用写法:在可能触发弹窗的动作之前开启监听,触发后获取弹窗内容,再自动应答。

3. 处理弹窗示例

from DrissionPage import ChromiumPage

page = ChromiumPage()
page.get("目标网址")

# 先开启弹窗监听
page.listen.start("")

# 执行可能触发弹窗的操作(如点击某个按钮)
page.ele(".danger-btn").click()

# 获取弹窗对象并读取文字
alert = page.listen.wait()
if alert:
    print("弹窗内容:", alert.text)
    alert.accept()   # 点击"确定"通过

💡 核心方法

  • page.listen.start(""):开启监听
  • page.listen.wait():等待弹窗出现,返回弹窗对象
  • 弹窗.text:读取弹窗文字
  • 弹窗.accept():点 "确定 / OK"
  • 弹窗.dismiss():点 "取消 / 关闭"

⚠️ 易错提醒

  1. 一定要在触发弹窗的动作之前开启监听,否则弹窗可能一闪而过
  2. 弹窗出现后页面会 "卡住",处理完才能继续操作
  3. 有些弹窗用 alert.accept() 自动点确定即可

⚔️ Kata 实战任务

任务需求:

  1. 导入 ChromiumPage
  2. 访问一个会触发弹窗的练习页面(如 https://the-internet.herokuapp.com/javascript_alerts)
  3. 先开启弹窗监听 page.listen.start("")
  4. 点击触发 alert 的按钮
  5. 用 page.listen.wait() 获取弹窗,读取文字并 accept() 确定
  6. 打印处理结果

参考代码

from DrissionPage import ChromiumPage

page = ChromiumPage()
# 访问触发弹窗的练习页
page.get("https://the-internet.herokuapp.com/javascript_alerts")
print("🌐 已打开弹窗练习页")

# 先开启弹窗监听
page.listen.start("")

# 点击"Click for JS Alert"按钮,触发alert弹窗
page.ele("button").click()
print("🔔 已点击触发弹窗的按钮")

# 等待并获取弹窗
alert = page.listen.wait()
if alert:
    print("📢 弹窗内容:", alert.text)
    alert.accept()   # 点确定,通过弹窗
    print("✅ 已点击确定,弹窗已驱散")

运行输出:

🌐 已打开弹窗练习页
🔔 已点击触发弹窗的按钮
📢 弹窗内容: I am a JS Alert
✅ 已点击确定,弹窗已驱散

🧠 思考题

  1. 为什么要先 page.listen.start("") 再触发弹窗?顺序反了会怎样?
  2. alert.accept() 和 alert.dismiss() 分别对应点哪个按钮?confirm 弹窗该用哪个?