融灵篇-Day29|魔法排障咒:排查找不到元素、超时、加载失败等常见问题

1 次阅读 2026-10-20 16:53

📖 知识点

1. 三种最高频的 "翻车"

报错场景表现常见原因
找不到元素ele 返回 None、后续报错选择器写错、元素未加载、在 iframe 里
超时等待超过 timeout 抛异常网络慢、元素真的不存在
加载失败页面打不开、取不到 title网络、网址错误、被拦截

2. 排障三步法

  1. 看报错信息:先读最后一行报错,多半直接告诉你问题(元素、网络、语法)
  2. 还原现场:打印 page.title、page.url、len(page.html),确认页面到底加载成什么样
  3. 对症下药:
    • 找不到元素 → 检查选择器、加等待、看是否在 iframe
    • 超时 → 加大 timeout、确认元素存在、检查网络
    • 加载失败 → 检查网址、网络、有无反爬拦截

3. 用 try/except 兜底(防御性编程)

关键操作包一层,出错不崩溃,提示并继续:

try:
    ele = page.ele(".target", timeout=3)
    if ele:
        print("找到:", ele.text)
    else:
        print("⚠️ 元素未找到")
except Exception as e:
    print("❌ 出错了:", e)

4. 排障常用自查咒语

print("标题:", page.title)      # 页面加载成功了吗
print("URL:", page.url)        # 是不是跳到别处
print("源码长度:", len(page.html))  # 内容量正常吗

💡 总结

  • 报错信息是最准确的线索,先读它
  • 用 title/url/html 长度 还原现场
  • 用 try/except 兜底,脚本更健壮

⚠️ 易错提醒

  1. 别一报错就重写,先看 "根因"(选择器?加载?网络?)
  2. try/except 要捕获具体异常,别一网打尽掩盖真问题
  3. ele(..., timeout=N) 可给定位加超时,找不到不再傻等

⚔️ Kata 实战任务

任务需求:

  1. 导入 ChromiumPage 和 time
  2. 访问百度
  3. 故意用一个不存在的选择器,演示找不到元素的情况
  4. 用 try/except 包裹,捕获异常并打印友好提示
  5. 再用正确选择器定位,验证排障后能正常找到

参考代码

from DrissionPage import ChromiumPage

page = ChromiumPage()
page.get("https://www.baidu.com")

# 魔法排障咒:先还原现场
print("📖 标题:", page.title)
print("🔗 URL:", page.url)

# 场景1:故意用错误选择器,演示排障
try:
    bad_ele = page.ele(".不存在的选择器", timeout=3)
    if bad_ele:
        print("找到元素:", bad_ele.text)
    else:
        print("⚠️ 元素未找到(返回None),请检查选择器是否正确")
except Exception as e:
    print(f"❌ 捕获到异常:{e}")

# 场景2:用正确选择器,排障成功
try:
    good_ele = page.ele(".s_ipt", timeout=3)
    if good_ele:
        print("✅ 排障成功,找到输入框:", good_ele.tag)
    else:
        print("⚠️ 仍找不到,继续排查")
except Exception as e:
    print(f"❌ 异常:{e}")

运行输出(示意):

📖 标题: 百度一下,你就知道
🔗 URL: https://www.baidu.com
⚠️ 元素未找到(返回None),请检查选择器是否正确
✅ 排障成功,找到输入框: input

🧠 思考题

  1. 看到报错时,第一步应该做什么?为什么说 "报错信息是最准的线索"?
  2. 用 try/except 包住整个脚本有什么隐患?应该只包住哪些操作?