📖 知识点
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():点 "取消 / 关闭"
⚠️ 易错提醒
- 一定要在触发弹窗的动作之前开启监听,否则弹窗可能一闪而过
- 弹窗出现后页面会 "卡住",处理完才能继续操作
- 有些弹窗用
alert.accept()自动点确定即可
⚔️ Kata 实战任务
任务需求:
- 导入 ChromiumPage
- 访问一个会触发弹窗的练习页面(如
https://the-internet.herokuapp.com/javascript_alerts) - 先开启弹窗监听
page.listen.start("") - 点击触发 alert 的按钮
- 用
page.listen.wait()获取弹窗,读取文字并accept()确定 - 打印处理结果
参考代码
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
✅ 已点击确定,弹窗已驱散
🧠 思考题
- 为什么要先
page.listen.start("")再触发弹窗?顺序反了会怎样? alert.accept()和alert.dismiss()分别对应点哪个按钮?confirm 弹窗该用哪个?