1. Giới thiệu về tương tác với các phần tử form
Các form trên trang web - đó là nơi phép thuật tương tác bắt đầu. Hãy tưởng tượng form như một bảng điều khiển bí ẩn cho phép người dùng giao tiếp với hệ thống. Nhưng thay vì đưa ra lệnh cho robot hút bụi, chúng ta cung cấp thông tin cho trang web.
Cách nhập văn bản vào trường văn bản
Đầu tiên hãy cùng thảo luận về cách Selenium cho phép chúng
ta nhập văn bản vào các trường văn bản. Điều này được thực
hiện bằng cách sử dụng phương thức send_keys()
.
Hãy cùng nhau tìm hiểu từng bước nhé.
from selenium import webdriver
# Đặt đường dẫn tới web-driver, đây là đường dẫn tới bản sao webdriver của bạn
driver = webdriver.Chrome(executable_path='path/to/chromedriver')
# Mở trang web
driver.get('http://example.com/login')
# Tìm trường nhập (ví dụ, theo id) và nhập văn bản
username_field = driver.find_element_by_id('username')
username_field.send_keys('tai_khoan_cua_toi')
password_field = driver.find_element_by_id('password')
password_field.send_keys('mat_khau_sieu_bi_mat_cua_toi')
Trong ví dụ đơn giản này, chúng ta mở trang, sau đó tìm các
phần tử nhập liệu bằng ID
. Sau đó, chúng ta sử
dụng phương thức send_keys()
để truyền văn bản
vào các trường form. Dễ dàng như copy-paste lên một cấp độ
mới!
Thủ thuật quan trọng để điền vào trường văn bản
Nếu bạn thấy rằng form hoạt động kỳ lạ, có thể đã có sẵn
văn bản trong trường. Trước khi nhập văn bản mới, hãy xoá
văn bản cũ bằng phương thức clear()
.
username_field.clear()
username_field.send_keys('gia_tri_moi')
Thủ thuật nhỏ này sẽ cứu bạn khỏi những cơn đau đầu không đáng có, thật đấy!
2. Nhấn nút
Bây giờ, khi mà các trường nhập đã được điền, đến lúc nhấn
nút, ví dụ như để gửi form. Với Selenium, điều này được thực
hiện bằng cách sử dụng phương thức click()
. Tương
tự như cách bạn nhấn nút "Xem thêm meme", nhưng bằng code.
# Tìm nút theo tên và nhấn
login_button = driver.find_element_by_name('login')
login_button.click()
Và thế là, script Selenium của chúng ta trở thành một bậc thầy nhấp chuột, giỏi hơn cả việc nhấn nút "Lựa chọn" trong game!
Ví dụ sử dụng
Hãy xem xét một ví dụ kết hợp việc sử dụng các phương thức
send_keys()
và click()
để điền vào
và gửi form đăng ký.
# Mở trang đăng ký
driver.get('http://example.com/register')
# Điền vào form đăng ký
driver.find_element_by_id('first_name').send_keys('Nguyễn')
driver.find_element_by_id('last_name').send_keys('Văn A')
driver.find_element_by_id('email').send_keys('nguyen@example.com')
driver.find_element_by_id('password').send_keys('matKhauSieuBiMat123')
# Nhấn nút "Đăng ký"
register_button = driver.find_element_by_css_selector('.register-button')
register_button.click()
Ví dụ đơn giản này cho thấy cách bạn có thể tự động hoá quá trình đăng ký trên trang web. Điều này có thể hữu ích cho việc kiểm tra form đăng ký và mô phỏng hoạt động của người dùng.
3. Xử lý các form khó tính
Đôi khi các trang web thích đùa giỡn với bạn. Bạn nhấn nút, và chẳng có gì xảy ra. Hoặc tệ hơn - trang báo lỗi. Hãy cùng thảo luận về một số vấn đề phổ biến và cách giải quyết chúng.
Làm việc với các phần tử động
Đôi khi, các phần tử trên trang không tải ngay lập tức. Trong trường hợp này, script của bạn có thể cố gắng tương tác với phần tử trước khi nó được tải đầy đủ. Giống như việc bắt đầu làm món trứng ốp-la trước khi lấy trứng ra khỏi tủ lạnh.
Để tránh những trò đùa này, hãy sử dụng chờ đợi. Selenium cho phép bạn chờ đợi cho đến khi phần tử sẵn sàng:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# Chờ cho đến khi phần tử có thể click, sau đó click
register_button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.CSS_SELECTOR, '.register-button'))
)
register_button.click()
Với WebDriverWait
, bạn có thể yêu cầu Selenium
chờ cho đến khi phần tử sẵn sàng tác động. Điều này làm tăng
đáng kể độ tin cậy của script của bạn.
Tương tác với các phần tử ẩn
Một số phần tử trên trang có thể bị ẩn - ví dụ như các nút ẩn hoặc các trường form. Điều này có thể gây lỗi khi cố gắng tương tác. Trong trường hợp này, bạn có thể làm cho phần tử hiển thị bằng JavaScript:
driver.execute_script("arguments[0].style.visibility='visible';", hidden_element)
hidden_element.click()
Phương pháp này cho phép bạn tương tác với các phần tử bị ẩn vì một lý do nào đó.
4. Áp dụng thực tế: tự động hóa form
Bây giờ, khi chúng ta đã hiểu cách tương tác với các form, hãy tưởng tượng những nơi chúng ta có thể áp dụng điều này vào đời sống thực.
Sếp của bạn quyết định rằng mọi người phải điền vào báo cáo hàng ngày thông qua form trên web. Và tất nhiên, bạn muốn tự động hóa một chút quá trình nhàm chán này. Với Selenium, bạn có thể tạo script tự động điền và gửi báo cáo của bạn mỗi ngày.
Ví dụ tự động hóa báo cáo
Hãy tưởng tượng rằng chúng ta có một trang web với form báo cáo hàng ngày. Form gồm các trường cho tên của bạn, phòng ban và báo cáo công việc đã hoàn thành. Hãy tự động hóa điều này:
driver.get('http://example.com/daily_report')
# Điền vào form báo cáo
driver.find_element_by_id('name').send_keys('Nguyễn Thị Thu An')
driver.find_element_by_id('department').send_keys('Công nghệ')
driver.find_element_by_id('report').send_keys('Hôm nay đã sửa mọi lỗi!')
# Gửi form
submit_button = driver.find_element_by_id('submit')
submit_button.click()
Script như thế này có thể tiết kiệm rất nhiều thời gian quý báu và giảm thiểu sai sót của con người. Hãy nhớ rằng, đối với các form phức tạp, bạn cần kiểm tra mỗi bước và dự tính các lỗi có thể xảy ra.
Vậy là chúng ta đã kết thúc bài giảng hôm nay! Hôm nay chúng ta đã học cách nhập văn bản vào các trường form và nhấn nút như một hệ thống biểu mẫu trực tuyến, đem đến cho bạn sức mạnh mạnh mẽ để tự động hóa tương tác với trang web.
Tiếp tục trải nghiệm với Selenium và đồng hành cùng chúng tôi để tìm hiểu thêm cách biến trình duyệt của bạn thành một cỗ máy tự động thực thụ!
GO TO FULL VERSION