📖 知识点
1. 为什么要等待?
网页元素不是瞬间全部出现。网络慢、动态渲染、加载更多…… 都可能让元素 "迟到"。不等就点,元素是 None,直接报错崩溃。等待咒就是解决这个问题。
2. 等元素出现:wait 等待
DrissionPage 的 .wait.eles() / .wait.ele_displayed() 等待元素出现并可见:
# 等待指定元素出现,最多等5秒,超时抛异常
page.wait.eles(".target", timeout=5)
timeout 单位是秒,表示最多等多久;元素提前出现就立即返回继续执行,不用干等满时间。
3. 等待元素消失 / 固定等待
# 等待某个元素消失(如加载中的转圈提示消失)
page.wait.eles_delete(".loading", timeout=5)
# 固定等待几秒(如等动态数据完全加载)
import time
time.sleep(2) # 简单粗暴的等2秒
4. 定位 + 等待 防御性写法
等待咒最常用的配合:先 wait,再定位操作
# 等待搜索按钮出现后,再点击
page.wait.eles("#su", timeout=5)
page.ele("#su").click()
这样就不会因为按钮还没加载出来而报错。
💡 总结
场景 咒语 等元素出现 page.wait.eles(选择器, timeout=秒)等元素消失 page.wait.eles_delete(选择器, timeout=秒)固定等待 time.sleep(秒)
⚠️ 易错提醒
- timeout 不写会一直等(或默认很久),建议显式给个合理秒数
- 等待超时会抛异常,用 try/except 捕获更稳(后续 Day29)
- 尽量用 "等元素出现" 代替盲目的 sleep,更高效稳定
⚔️ Kata 实战任务
任务需求:
- 导入 ChromiumPage 和 time
- 访问百度
- 用
page.wait.eles(".s_ipt", timeout=5)等待搜索输入框出现 - 再用
page.wait.eles("#su", timeout=5)等待搜索按钮出现 - 输入关键词
Python并点击搜索按钮 - 用
time.sleep(2)固定等待搜索结果加载
参考代码
from DrissionPage import ChromiumPage
import time
page = ChromiumPage()
page.get("https://www.baidu.com")
# 等待显形咒:等输入框出现
page.wait.eles(".s_ipt", timeout=5)
print("✅ 搜索输入框已出现")
# 等搜索按钮出现
page.wait.eles("#su", timeout=5)
print("✅ 搜索按钮已出现")
# 输入关键词并点击搜索
page.ele(".s_ipt").input("Python")
page.ele("#su").click()
print("🔍 已发起搜索")
# 固定等待2秒,让结果页加载
time.sleep(2)
print("⏳ 等待结果加载完成")
运行输出:
✅ 搜索输入框已出现
✅ 搜索按钮已出现
🔍 已发起搜索
⏳ 等待结果加载完成
🧠 思考题
page.wait.eles()和time.sleep()的本质区别是什么?为什么推荐前者?- 如果元素始终不出现,
page.wait.eles()到 timeout 后会怎样?怎么避免程序崩溃?
行者孙Python