Bạn đã bao giờ viết xong một script chạy rất tốt ở nhà nhưng khi mang lên công ty (với mạng chậm hơn) thì lại báo lỗi NoSuchElementException? Đó là vì bạn chưa làm chủ kỹ thuật Chờ đợi (Wait Strategies). Buổi học hôm nay sẽ giúp script của bạn trở nên thông minh và kiên nhẫn hơn.
1️⃣ Tại Sao Cần Chờ Đợi?
Trang web hiện đại sử dụng AJAX và JavaScript để tải nội dung một cách bất đồng bộ. Selenium chạy code Python nhanh hơn tốc độ hiển thị của trình duyệt, dẫn đến việc nó cố gắng tương tác với một thứ chưa kịp xuất hiện.
2️⃣ Explicit Wait & Implicit Wait
Hãy bỏ ngay thói quen dùng time.sleep() vì nó làm script của bạn chậm đi một cách lãng phí. Thay vào đó hãy dùng các chiến lược chờ đợi thông minh hơn:
- Implicit Wait: Thiết lập một lần duy nhất, Selenium sẽ tự động chờ trong X giây cho mọi phần tử trước khi báo lỗi.
- Explicit Wait (Khuyên dùng): Chỉ chờ cho một phần tử cụ thể với một điều kiện cụ thể (ví dụ: chờ cho đến khi nút Đăng nhập có thể click được).
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# Ví dụ Explicit Wait: Chờ tối đa 10 giây cho đến khi ID 'success-msg' hiện ra
wait = WebDriverWait(driver, 10)
message = wait.until(EC.visibility_of_element_located((By.ID, "success-msg")))
3️⃣ Xử Lý Lỗi Và Ngoại Lệ (Error Handling)
Script Automation của bạn không được phép “chết” giữa chừng chỉ vì một lỗi nhỏ. Hãy sử dụng khối try-except để bắt lỗi và xử lý chúng một cách êm đẹp.
try:
# Code tương tác
driver.find_element(By.ID, "promo-code").send_keys("SALE50")
except Exception as e:
print(f"Lỗi: {e}. Đang thực hiện phương án dự phòng...")
# Chụp ảnh màn hình lỗi để debug sau này
driver.save_screenshot("error.png")
TỔNG KẾT BUỔI 4
Chúc mừng bạn đã hoàn thành Module 1 về Selenium! Giờ đây bạn đã có đủ công cụ để xây dựng các robot điều khiển trình duyệt chuyên nghiệp, ổn định và có khả năng tự phục hồi khi gặp lỗi. Trong Module 2, chúng ta sẽ học một cách lấy dữ liệu web nhanh hơn gấp nhiều lần với Beautiful Soup!
🛡️ Bảo mật và ổn định hạ tầng tự động hóa tại: Hướng nghiệp Python – Automation