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.
-
Cài đặt Selenium:
pip install selenium -
WebDriver:
Đây là “cầu nối” giúp Selenium giao tiếp với trình duyệt.- ChromeDriver (cho Google Chrome): Tải từ https://chromedriver.chromium.org/downloads. Đảm bảo phiên bản ChromeDriver tương thích với phiên bản Chrome của bạn.
- GeckoDriver (cho Mozilla Firefox): Tải từ https://github.com/mozilla/geckodriver/releases.
- msedgedriver (cho Microsoft Edge): Tải từ https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/.
Lưu ý quan trọng: Sau khi tải về, hãy giải nén file WebDriver (ví dụ:
chromedriver.exehoặcgeckodriver) 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:
- Khởi tạo trình duyệt: Mở một phiên bản trình duyệt mới (ví dụ: Chrome).
- Truy cập URL: Điều hướng đến trang web chứa form cần điền.
- Đị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.
- 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.
- Nhập văn bản vào
- Gửi form: Nhấn nút submit.
- 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.servicedù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ùngabout: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ơntime.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ínhid. Ưu tiên sử dụng vì nhanh và thường là duy nhất.By.NAME: Tìm theo thuộc tínhname.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ượngSelectđể 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ínhvalue.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
WebDriverWaitvớiEC.presence_of_element_locatedhoặcEC.visibility_of_element_locatedđể chờ phần tử xuất hiện.
- Kiểm tra lại
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
locatorvà điều kiện chờ. Đôi khi phần tử có tồn tại nhưng chưavisiblehoặcclickable.
- Tăng thời gian chờ của
- Nguyên nhân:
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_PATHtrỏ đú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.
- Đảm bảo
- Nguyên nhân: Thường liên quan đến việc khởi tạo WebDriver.
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.
