Cách dùng Selenium Python để tự động điền form hiệu quả

Chào bạn, tôi là một Senior Python Developer và chuyên gia Automation. Hôm nay chúng ta sẽ cùng “thực chiến” cách dùng Selenium Python để tự động điền form, một kỹ năng cực kỳ hữu ích trong rất nhiều dự án tự động hóa. Mục tiêu là có code chạy được ngay, hiểu rõ bản chất và biết cách xử lý các tình huống thực tế.

Giới thiệu: Tại sao cần giải pháp này?

Bạn có bao giờ phải điền điền lại hàng chục, hàng trăm cái form với cấu trúc tương tự nhau? Hay cần kiểm thử một luồng đăng ký/liên hệ nào đó trên website liên tục? Nếu câu trả lời là CÓ, thì bạn đang lãng phí thời gian và công sức một cách không cần thiết rồi đấy. Việc cách dùng Selenium Python để tự động điền form không chỉ giúp bạn tiết kiệm thời gian, loại bỏ lỗi do con người, mà còn mở ra cánh cửa cho việc tự động hóa các tác vụ phức tạp hơn như thu thập dữ liệu (web scraping) hoặc kiểm thử tự động.

Với Selenium Python, chúng ta có thể điều khiển trình duyệt web (Chrome, Firefox, Edge…) y hệt như một người dùng thật, nhưng với tốc độ và độ chính xác vượt trội.

Chuẩn bị

Để bắt đầu, bạn cần cài đặt thư viện Selenium và một WebDriver tương ứng với trình duyệt bạn muốn sử dụng.

  1. Cài đặt Selenium:

    pip install selenium
  2. WebDriver:
    Đây là “cầu nối” giúp Selenium giao tiếp với trình duyệt.

    Lưu ý quan trọng: Sau khi tải về, hãy giải nén file WebDriver (ví dụ: chromedriver.exe hoặc geckodriver) và đặt nó vào một thư mục có trong biến môi trường PATH của hệ thống, HOẶC bạn phải chỉ định đường dẫn tuyệt đối đến file WebDriver khi khởi tạo trình duyệt trong code. Để đơn giản, tôi sẽ chỉ định đường dẫn trong ví dụ.

Phân tích Logic

Thuật toán tự động điền form của chúng ta sẽ rất trực quan:

  1. Khởi tạo trình duyệt: Mở một phiên bản trình duyệt mới (ví dụ: Chrome).
  2. Truy cập URL: Điều hướng đến trang web chứa form cần điền.
  3. Định vị các trường form: Tìm các phần tử HTML của form (input, textarea, select, radio button, checkbox, button) bằng các bộ chọn (locator) như ID, name, class name, XPath, CSS selector.
  4. Tương tác với các trường form:
    • Nhập văn bản vào input, textarea.
    • Chọn giá trị từ select (dropdown).
    • Click vào radio button, checkbox.
  5. Gửi form: Nhấn nút submit.
  6. Kết thúc: Đóng trình duyệt.

Hướng dẫn Code (Step-by-step)

Để minh họa, chúng ta sẽ giả định điền vào một form đăng ký đơn giản có các trường: Tên, Email, Mật khẩu, Giới tính (radio), Quốc gia (dropdown) và nút Gửi.

Form mẫu (cấu trúc HTML giả định):

<!-- Đây chỉ là cấu trúc HTML bạn tưởng tượng, KHÔNG cần tạo file HTML này -->
<form id="registrationForm">
    <label for="name">Tên:</label>
    <input type="text" id="name" name="user_name" placeholder="Nhập tên của bạn">
    <br>
    <label for="email">Email:</label>
    <input type="email" id="email" name="user_email" placeholder="Nhập email">
    <br>
    <label for="password">Mật khẩu:</label>
    <input type="password" id="password" name="user_password" placeholder="Nhập mật khẩu">
    <br>
    <label>Giới tính:</label>
    <input type="radio" id="male" name="gender" value="male">
    <label for="male">Nam</label>
    <input type="radio" id="female" name="gender" value="female">
    <label for="female">Nữ</label>
    <br>
    <label for="country">Quốc gia:</label>
    <select id="country" name="user_country">
        <option value="">--Chọn quốc gia--</option>
        <option value="VN">Việt Nam</option>
        <option value="US">Mỹ</option>
        <option value="JP">Nhật Bản</option>
    </select>
    <br>
    <button type="submit" id="submitBtn">Đăng ký</button>
</form>

Code Python thực tế:

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException, TimeoutException, WebDriverException

# Cấu hình đường dẫn tới ChromeDriver
# THAY THẾ 'path/to/your/chromedriver' bằng đường dẫn thực tế trên máy bạn
# Ví dụ: Windows: 'C:\WebDriver\chromedriver.exe'
# Ví dụ: macOS/Linux: '/usr/local/bin/chromedriver' hoặc '/Users/youruser/Downloads/chromedriver'
CHROMEDRIVER_PATH = 'path/to/your/chromedriver' 

# URL của form mẫu (trong thực tế bạn sẽ thay bằng URL của trang web cần điền form)
# Để minh họa, tôi sẽ dùng một URL trống và giả định các ID/NAME của form.
# Nếu bạn muốn thử nghiệm trên một form thật, hãy tìm một form đơn giản và thay URL + locators.
FORM_URL = "about:blank" # Giả định chúng ta sẽ tương tác với DOM cục bộ hoặc một trang web có cấu trúc này

def auto_fill_form():
    """
    Hàm tự động điền form sử dụng Selenium.
    """
    driver = None # Khởi tạo driver là None để đảm bảo nó được đóng trong finally block
    try:
        # 1. Khởi tạo WebDriver
        # Thiết lập ChromeOptions nếu cần (ví dụ: chạy ẩn danh, không hiện cửa sổ trình duyệt)
        chrome_options = webdriver.ChromeOptions()
        # chrome_options.add_argument("--headless") # Chạy ẩn danh, không mở cửa sổ trình duyệt
        chrome_options.add_argument("--start-maximized") # Mở trình duyệt full màn hình

        print("Đang khởi tạo WebDriver...")
        # Truyền đường dẫn của ChromeDriver vào service
        service = webdriver.ChromeService(executable_path=CHROMEDRIVER_PATH)
        driver = webdriver.Chrome(service=service, options=chrome_options)
        print("WebDriver đã được khởi tạo thành công.")

        # 2. Truy cập URL của form
        print(f"Đang truy cập URL: {FORM_URL}")
        driver.get(FORM_URL)

        # Để minh họa, chúng ta sẽ thêm HTML form giả định vào DOM nếu FORM_URL là "about:blank"
        if FORM_URL == "about:blank":
            print("Đang tạo form mẫu trên trang trống...")
            sample_html_form = """
            <!DOCTYPE html>
            <html>
            <head>
                <title>Form Mẫu Tự Động</title>
            </head>
            <body>
                <h1>Đăng ký tài khoản</h1>
                <form id="registrationForm">
                    <label for="name">Tên:</label>
                    <input type="text" id="name" name="user_name" placeholder="Nhập tên của bạn">
                    <br><br>
                    <label for="email">Email:</label>
                    <input type="email" id="email" name="user_email" placeholder="Nhập email">
                    <br><br>
                    <label for="password">Mật khẩu:</label>
                    <input type="password" id="password" name="user_password" placeholder="Nhập mật khẩu">
                    <br><br>
                    <label>Giới tính:</label>
                    <input type="radio" id="male" name="gender" value="male">
                    <label for="male">Nam</label>
                    <input type="radio" id="female" name="gender" value="female">
                    <label for="female">Nữ</label>
                    <br><br>
                    <label for="country">Quốc gia:</label>
                    <select id="country" name="user_country">
                        <option value="">--Chọn quốc gia--</option>
                        <option value="VN">Việt Nam</option>
                        <option value="US">Mỹ</option>
                        <option value="JP">Nhật Bản</option>
                    </select>
                    <br><br>
                    <button type="submit" id="submitBtn">Đăng ký</button>
                </form>
                <div id="statusMessage" style="color: green; margin-top: 20px;"></div>
                <script>
                    document.getElementById('registrationForm').addEventListener('submit', function(event) {
                        event.preventDefault(); // Ngăn form submit thực sự
                        document.getElementById('statusMessage').innerText = 'Form đã được gửi thành công!';
                        console.log('Form data:', {
                            name: document.getElementById('name').value,
                            email: document.getElementById('email').value,
                            password: document.getElementById('password').value,
                            gender: document.querySelector('input[name="gender"]:checked')?.value,
                            country: document.getElementById('country').value
                        });
                    });
                </script>
            </body>
            </html>
            """
            driver.execute_script(f"document.open(); document.write(`{sample_html_form}`); document.close();")
            # Chờ một chút để DOM được load hoàn chỉnh sau khi inject HTML
            time.sleep(1)

        # Sử dụng WebDriverWait để chờ các phần tử xuất hiện
        # Đây là cách tốt hơn so với time.sleep() vì nó chờ cho đến khi điều kiện được đáp ứng hoặc hết thời gian
        wait = WebDriverWait(driver, 10) # Chờ tối đa 10 giây

        print("Đang định vị và điền dữ liệu vào form...")

        # 3. Định vị và điền dữ liệu vào các trường Input/Textarea
        # Trường "Tên"
        name_input = wait.until(EC.presence_of_element_located((By.ID, "name")))
        name_input.send_keys("Nguyễn Văn A")
        print("Đã điền Tên: Nguyễn Văn A")

        # Trường "Email"
        email_input = wait.until(EC.presence_of_element_located((By.NAME, "user_email")))
        email_input.send_keys("nguyen.van.a@example.com")
        print("Đã điền Email: nguyen.van.a@example.com")

        # Trường "Mật khẩu"
        password_input = wait.until(EC.presence_of_element_located((By.ID, "password")))
        password_input.send_keys("MatKhauCuaToi123!")
        print("Đã điền Mật khẩu: MatKhauCuaToi123!")

        # 4. Xử lý Radio Buttons (chọn Giới tính)
        # Chọn "Nữ"
        female_radio = wait.until(EC.element_to_be_clickable((By.ID, "female")))
        female_radio.click()
        print("Đã chọn Giới tính: Nữ")

        # 5. Xử lý Dropdown (chọn Quốc gia)
        country_dropdown_element = wait.until(EC.presence_of_element_located((By.ID, "country")))
        country_dropdown = Select(country_dropdown_element)

        # Chọn theo giá trị (value) của option
        country_dropdown.select_by_value("VN")
        print("Đã chọn Quốc gia: Việt Nam (theo value 'VN')")

        # Hoặc chọn theo văn bản hiển thị
        # country_dropdown.select_by_visible_text("Mỹ")
        # print("Đã chọn Quốc gia: Mỹ (theo text hiển thị 'Mỹ')")

        time.sleep(2) # Tạm dừng để bạn có thể thấy các trường đã được điền

        # 6. Gửi Form
        submit_button = wait.until(EC.element_to_be_clickable((By.ID, "submitBtn")))
        submit_button.click()
        print("Đã click nút Đăng ký.")

        # Chờ thông báo thành công xuất hiện (tùy thuộc vào trang web thực tế)
        # Trong ví dụ form mẫu này, chúng ta chờ div #statusMessage hiện ra text
        success_message = wait.until(EC.visibility_of_element_located((By.ID, "statusMessage")))
        print(f"Thông báo sau khi gửi form: {success_message.text}")

        print("Quá trình điền và gửi form hoàn tất!")
        time.sleep(3) # Giữ trình duyệt mở thêm một lát để xem kết quả

    except NoSuchElementException as e:
        print(f"Lỗi: Không tìm thấy phần tử. Vui lòng kiểm tra lại locators. Chi tiết: {e}")
    except TimeoutException as e:
        print(f"Lỗi: Quá thời gian chờ. Phần tử không xuất hiện trong khung thời gian quy định. Chi tiết: {e}")
    except WebDriverException as e:
        print(f"Lỗi WebDriver: Có vấn đề với trình duyệt hoặc ChromeDriver. Chi tiết: {e}")
        print("Đảm bảo ChromeDriver đúng phiên bản và đường dẫn.")
    except Exception as e:
        print(f"Đã xảy ra lỗi không xác định: {e}")
    finally:
        # Đảm bảo trình duyệt được đóng dù có lỗi xảy ra hay không
        if driver:
            print("Đang đóng trình duyệt...")
            driver.quit()
            print("Trình duyệt đã đóng.")

# Gọi hàm để chạy tự động hóa
if __name__ == "__main__":
    auto_fill_form()

Giải thích các hàm quan trọng:

  • webdriver.Chrome(service=service, options=chrome_options): Khởi tạo một đối tượng WebDriver cho trình duyệt Chrome. service dùng để chỉ định đường dẫn của chromedriver, options để cấu hình trình duyệt.
  • driver.get(URL): Mở URL được chỉ định trong trình duyệt.
  • driver.execute_script(...): Chạy mã JavaScript trực tiếp trên trang. Tôi dùng nó để “tạo” form mẫu khi dùng about:blank.
  • WebDriverWait(driver, 10): Tạo một đối tượng chờ tường minh (explicit wait), chờ tối đa 10 giây. Đây là cách xử lý việc tải trang bất đồng bộ tốt hơn time.sleep().
  • EC.presence_of_element_located((By.ID, "element_id")): Điều kiện chờ cho đến khi một phần tử được tìm thấy trong DOM bằng bộ chọn ID.
  • EC.element_to_be_clickable((By.ID, "element_id")): Điều kiện chờ cho đến khi một phần tử không chỉ hiện diện mà còn có thể tương tác (click) được.
  • By.ID, By.NAME, By.XPATH, By.CSS_SELECTOR: Các chiến lược định vị phần tử.
    • By.ID: Tìm theo thuộc tính id. Ưu tiên sử dụng vì nhanh và thường là duy nhất.
    • By.NAME: Tìm theo thuộc tính name.
    • By.XPATH: Tìm theo đường dẫn XML của phần tử. Rất mạnh mẽ nhưng có thể chậm và dễ vỡ nếu cấu trúc DOM thay đổi.
    • By.CSS_SELECTOR: Tìm theo bộ chọn CSS. Khá mạnh và nhanh hơn XPath trong nhiều trường hợp.
  • element.send_keys("data"): Gửi chuỗi ký tự vào trường input hoặc textarea.
  • element.click(): Nhấn vào một phần tử (button, radio, checkbox, link).
  • Select(dropdown_element): Tạo đối tượng Select để tương tác với các thẻ <select>.
    • select_by_value("value"): Chọn một option dựa trên giá trị của thuộc tính value.
    • select_by_visible_text("text"): Chọn một option dựa trên văn bản hiển thị.
    • select_by_index(index): Chọn một option dựa trên chỉ mục của nó (bắt đầu từ 0).
  • driver.quit(): Đóng toàn bộ trình duyệt và phiên WebDriver.

Xử lý lỗi thường gặp

  • NoSuchElementException:
    • Nguyên nhân: Selenium không thể tìm thấy phần tử bạn đang cố gắng tương tác.
    • Cách fix:
      • Kiểm tra lại locator (ID, Name, XPath, CSS Selector) xem đã chính xác chưa (sử dụng Developer Tools của trình duyệt).
      • Phần tử có thể chưa load xong khi code cố gắng tìm. Sử dụng WebDriverWait với EC.presence_of_element_located hoặc EC.visibility_of_element_located để chờ phần tử xuất hiện.
  • TimeoutException:
    • Nguyên nhân: WebDriverWait đã hết thời gian chờ nhưng điều kiện mong muốn (ví dụ: phần tử xuất hiện) không được đáp ứng.
    • Cách fix:
      • Tăng thời gian chờ của WebDriverWait.
      • Kiểm tra lại locator và điều kiện chờ. Đôi khi phần tử có tồn tại nhưng chưa visible hoặc clickable.
  • WebDriverException:
    • Nguyên nhân: Thường liên quan đến việc khởi tạo WebDriver.
      • Đường dẫn đến ChromeDriver (hoặc GeckoDriver) không chính xác.
      • Phiên bản WebDriver không tương thích với phiên bản trình duyệt.
      • Trình duyệt không được cài đặt hoặc không tìm thấy.
    • Cách fix:
      • Đảm bảo CHROMEDRIVER_PATH trỏ đúng đến file WebDriver.
      • Tải lại WebDriver có phiên bản khớp với trình duyệt của bạn.
      • Cài đặt lại trình duyệt nếu cần.
  • StaleElementReferenceException:
    • Nguyên nhân: Phần tử mà bạn đang cố gắng tương tác đã bị thay đổi hoặc xóa khỏi DOM sau khi bạn định vị nó (ví dụ: trang đã tải lại một phần).
    • Cách fix: Định vị lại phần tử ngay trước khi tương tác với nó.

Kết luận & Source code toàn văn

Bạn đã nắm được cách cơ bản nhưng mạnh mẽ để cách dùng Selenium Python để tự động điền form. Kỹ thuật này là nền tảng cho nhiều tác vụ tự động hóa web khác. Hãy nhớ luôn sử dụng WebDriverWait để xử lý các vấn đề về thời gian tải trang và try/except/finally để xử lý lỗi một cách chuyên nghiệp.

Dưới đây là toàn bộ source code bạn có thể sao chép, dán, và điều chỉnh cho phù hợp với form của mình:

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException, TimeoutException, WebDriverException

# Cấu hình đường dẫn tới ChromeDriver
# THAY THẾ 'path/to/your/chromedriver' bằng đường dẫn thực tế trên máy bạn
# Ví dụ: Windows: 'C:\WebDriver\chromedriver.exe'
# Ví dụ: macOS/Linux: '/usr/local/bin/chromedriver' hoặc '/Users/youruser/Downloads/chromedriver'
CHROMEDRIVER_PATH = 'path/to/your/chromedriver' 

# URL của form mẫu (trong thực tế bạn sẽ thay bằng URL của trang web cần điền form)
# Để minh họa, tôi sẽ dùng một URL trống và giả định các ID/NAME của form.
# Nếu bạn muốn thử nghiệm trên một form thật, hãy tìm một form đơn giản và thay URL + locators.
FORM_URL = "about:blank" # Giả định chúng ta sẽ tương tác với DOM cục bộ hoặc một trang web có cấu trúc này

def auto_fill_form():
    """
    Hàm tự động điền form sử dụng Selenium.
    Bao gồm xử lý lỗi và đảm bảo đóng trình duyệt.
    """
    driver = None # Khởi tạo driver là None để đảm bảo nó được đóng trong finally block
    try:
        # 1. Khởi tạo WebDriver
        # Thiết lập ChromeOptions nếu cần (ví dụ: chạy ẩn danh, không hiện cửa sổ trình duyệt)
        chrome_options = webdriver.ChromeOptions()
        # chrome_options.add_argument("--headless") # Chạy ẩn danh, không mở cửa sổ trình duyệt
        chrome_options.add_argument("--start-maximized") # Mở trình duyệt full màn hình

        print("Đang khởi tạo WebDriver...")
        # Truyền đường dẫn của ChromeDriver vào service
        service = webdriver.ChromeService(executable_path=CHROMEDRIVER_PATH)
        driver = webdriver.Chrome(service=service, options=chrome_options)
        print("WebDriver đã được khởi tạo thành công.")

        # 2. Truy cập URL của form
        print(f"Đang truy cập URL: {FORM_URL}")
        driver.get(FORM_URL)

        # Để minh họa, chúng ta sẽ thêm HTML form giả định vào DOM nếu FORM_URL là "about:blank"
        # TRONG THỰC TẾ, bạn sẽ bỏ qua phần này và chỉ cần driver.get(YOUR_FORM_URL)
        if FORM_URL == "about:blank":
            print("Đang tạo form mẫu trên trang trống...")
            sample_html_form = """
            <!DOCTYPE html>
            <html>
            <head>
                <title>Form Mẫu Tự Động</title>
            </head>
            <body>
                <h1>Đăng ký tài khoản</h1>
                <form id="registrationForm">
                    <label for="name">Tên:</label>
                    <input type="text" id="name" name="user_name" placeholder="Nhập tên của bạn">
                    <br><br>
                    <label for="email">Email:</label>
                    <input type="email" id="email" name="user_email" placeholder="Nhập email">
                    <br><br>
                    <label for="password">Mật khẩu:</label>
                    <input type="password" id="password" name="user_password" placeholder="Nhập mật khẩu">
                    <br><br>
                    <label>Giới tính:</label>
                    <input type="radio" id="male" name="gender" value="male">
                    <label for="male">Nam</label>
                    <input type="radio" id="female" name="gender" value="female">
                    <label for="female">Nữ</label>
                    <br><br>
                    <label for="country">Quốc gia:</label>
                    <select id="country" name="user_country">
                        <option value="">--Chọn quốc gia--</option>
                        <option value="VN">Việt Nam</option>
                        <option value="US">Mỹ</option>
                        <option value="JP">Nhật Bản</option>
                    </select>
                    <br><br>
                    <button type="submit" id="submitBtn">Đăng ký</button>
                </form>
                <div id="statusMessage" style="color: green; margin-top: 20px;"></div>
                <script>
                    document.getElementById('registrationForm').addEventListener('submit', function(event) {
                        event.preventDefault(); // Ngăn form submit thực sự để không chuyển trang
                        document.getElementById('statusMessage').innerText = 'Form đã được gửi thành công!';
                        console.log('Form data:', {
                            name: document.getElementById('name').value,
                            email: document.getElementById('email').value,
                            password: document.getElementById('password').value,
                            gender: document.querySelector('input[name="gender"]:checked')?.value,
                            country: document.getElementById('country').value
                        });
                    });
                </script>
            </body>
            </html>
            """
            driver.execute_script(f"document.open(); document.write(`{sample_html_form}`); document.close();")
            # Chờ một chút để DOM được load hoàn chỉnh sau khi inject HTML
            time.sleep(1)

        # Sử dụng WebDriverWait để chờ các phần tử xuất hiện
        # Đây là cách tốt hơn so với time.sleep() vì nó chờ cho đến khi điều kiện được đáp ứng hoặc hết thời gian
        wait = WebDriverWait(driver, 10) # Chờ tối đa 10 giây

        print("Đang định vị và điền dữ liệu vào form...")

        # 3. Định vị và điền dữ liệu vào các trường Input/Textarea
        # Trường "Tên" - Sử dụng By.ID
        name_input = wait.until(EC.presence_of_element_located((By.ID, "name")))
        name_input.send_keys("Nguyễn Văn A")
        print("Đã điền Tên: Nguyễn Văn A")

        # Trường "Email" - Sử dụng By.NAME
        email_input = wait.until(EC.presence_of_element_located((By.NAME, "user_email")))
        email_input.send_keys("nguyen.van.a@example.com")
        print("Đã điền Email: nguyen.van.a@example.com")

        # Trường "Mật khẩu" - Sử dụng By.ID
        password_input = wait.until(EC.presence_of_element_located((By.ID, "password")))
        password_input.send_keys("MatKhauCuaToi123!")
        print("Đã điền Mật khẩu: MatKhauCuaToi123!")

        # 4. Xử lý Radio Buttons (chọn Giới tính)
        # Chọn "Nữ" - Sử dụng By.ID và đảm bảo phần tử có thể click
        female_radio = wait.until(EC.element_to_be_clickable((By.ID, "female")))
        female_radio.click()
        print("Đã chọn Giới tính: Nữ")

        # 5. Xử lý Dropdown (chọn Quốc gia)
        # Tìm phần tử select theo ID
        country_dropdown_element = wait.until(EC.presence_of_element_located((By.ID, "country")))
        # Khởi tạo đối tượng Select từ phần tử tìm được
        country_dropdown = Select(country_dropdown_element)

        # Chọn option trong dropdown theo giá trị (value) của thuộc tính option
        country_dropdown.select_by_value("VN")
        print("Đã chọn Quốc gia: Việt Nam (theo value 'VN')")

        # Bạn cũng có thể chọn theo văn bản hiển thị:
        # country_dropdown.select_by_visible_text("Mỹ")
        # print("Đã chọn Quốc gia: Mỹ (theo text hiển thị 'Mỹ')")

        # Hoặc chọn theo chỉ số (index, bắt đầu từ 0):
        # country_dropdown.select_by_index(2) # Chọn option thứ 2 (ví dụ: Mỹ nếu VN là 1)
        # print("Đã chọn Quốc gia theo index 2")

        time.sleep(2) # Tạm dừng để bạn có thể thấy các trường đã được điền trước khi submit

        # 6. Gửi Form
        # Tìm nút submit theo ID và đảm bảo nó có thể click
        submit_button = wait.until(EC.element_to_be_clickable((By.ID, "submitBtn")))
        submit_button.click()
        print("Đã click nút Đăng ký.")

        # Chờ thông báo thành công xuất hiện (tùy thuộc vào trang web thực tế)
        # Trong ví dụ form mẫu này, chúng ta chờ div #statusMessage hiện ra text
        success_message = wait.until(EC.visibility_of_element_located((By.ID, "statusMessage")))
        print(f"Thông báo sau khi gửi form: {success_message.text}")

        print("Quá trình điền và gửi form hoàn tất!")
        time.sleep(3) # Giữ trình duyệt mở thêm một lát để bạn có thể xem kết quả

    except NoSuchElementException as e:
        print(f"Lỗi: Không tìm thấy phần tử '{e.msg}'. Vui lòng kiểm tra lại locators (ID, Name, XPath...).")
        print(f"Chi tiết lỗi: {e}")
    except TimeoutException as e:
        print(f"Lỗi: Quá thời gian chờ (timeout). Phần tử không xuất hiện hoặc không sẵn sàng trong 10 giây.")
        print(f"Chi tiết lỗi: {e}")
    except WebDriverException as e:
        print(f"Lỗi WebDriver: Có vấn đề với trình duyệt hoặc ChromeDriver.")
        print("Đảm bảo ChromeDriver đúng phiên bản và đường dẫn.")
        print(f"Chi tiết lỗi: {e}")
    except Exception as e:
        print(f"Đã xảy ra lỗi không xác định trong quá trình tự động điền form: {e}")
    finally:
        # Đảm bảo trình duyệt được đóng dù có lỗi xảy ra hay không
        if driver:
            print("Đang đóng trình duyệt...")
            driver.quit()
            print("Trình duyệt đã đóng.")

# Gọi hàm để chạy tự động hóa khi script được thực thi trực tiếp
if __name__ == "__main__":
    auto_fill_form()

See more: Cách dùng Selenium Python để tự động điền form.

Discover: Python Trick.

By admin

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *