Tổng quan về Selenium WebDriver
Trong lĩnh vực thu thập dữ liệu web (web scraping), thư viện requests thường gặp hạn chế vì nó chỉ tải về mã nguồn HTML tĩnh mà không thể thực thi các đoạn mã JavaScript hay xử lý các hiệu ứng CSS phức tạp. Đây là lúc Selenium phát huy vai trò của mình.
Selenium ban đầu được phát triển như một công cụ tự động hóa kiểm thử (automation testing). Tuy nhiên, nhờ khả năng điều khiển trình duyệt thực tế để thực hiện các thao tác như nhấp chuột, nhập liệu, cuộn trang và chờ đợi render nội dung động, Selenium đã trở thành công cụ đắc lực để xử lý các website hiện đại.
Hướng dẫn cài đặt môi trường
Để bắt đầu với Selenium trong Python, bạn cần thực hiện hai bước cài đặt chính:
1. Cài đặt thư viện Selenium:
pip install selenium
2. Cài đặt trình điều khiển (WebDriver):
Mỗi trình duyệt yêu cầu một driver riêng biệt để Selenium có thể giao tiếp:
- Google Chrome: Tải ChromeDriver tương ứng với phiên bản trình duyệt tại đây.
- Firefox: Tải GeckoDriver tại đây.
Sau khi tải về, hãy giải nén và đặt tệp thực thi (.exe trên Windows) vào thư mục Scripts của Python hoặc thêm đường dẫn của nó vào biến môi trường PATH của hệ thống.
Khởi tạo và cấu hình trình duyệt
Dưới đây là cách khởi tạo các loại trình duyệt phổ biến thông qua Selenium WebDriver:
from selenium import webdriver
# Khởi tạo các trình duyệt khác nhau
chrome_app = webdriver.Chrome()
firefox_app = webdriver.Firefox()
edge_app = webdriver.Edge()
# Truy cập một trang web cụ thể
chrome_app.get("https://www.google.com")
Các phương pháp định vị phần tử (Locators)
Để tương tác với các thành phần trên trang web, bạn cần xác định vị trí của chúng. Selenium cung cấp nhiều phương thức định vị khác nhau. Giả sử chúng ta có cấu trúc HTML như sau:
<form id="search-form" class="main-form">
<input id="query-box" name="search-key" class="input-text" />
<button type="submit">Tìm kiếm</button>
<a href="/help">Trợ giúp</a>
</form>
Bạn có thể sử dụng các cách sau để định vị ô nhập liệu (input):
from selenium.webdriver.common.by import By
# Định vị qua ID
element_id = chrome_app.find_element(By.ID, "query-box")
# Định vị qua thuộc tính Name
element_name = chrome_app.find_element(By.NAME, "search-key")
# Định vị qua Class Name
element_class = chrome_app.find_element(By.CLASS_NAME, "input-text")
# Định vị bằng Tag Name
element_tag = chrome_app.find_element(By.TAG_NAME, "input")
# Định vị bằng XPath
element_xpath = chrome_app.find_element(By.XPATH, "//input[@id='query-box']")
# Định vị bằng CSS Selector
element_css = chrome_app.find_element(By.CSS_SELECTOR, "#search-form .input-text")
# Định vị liên kết bằng Text
link_element = chrome_app.find_element(By.LINK_TEXT, "Trợ giúp")
partial_link = chrome_app.find_element(By.PARTIAL_LINK_TEXT, "Trợ")
Làm việc với danh sách phần tử
Trong trường hợp trang web có nhiều phần tử giống nhau (ví dụ: danh sách sản phẩm, các dòng trong bảng), bạn có thể sử dụng find_elements để trả về một danh sách các đối tượng:
# Lấy tất cả các thẻ input có trên trang
all_inputs = chrome_app.find_elements(By.TAG_NAME, "input")
for item in all_inputs:
print(item.get_attribute("id"))
Quy trình tương tác cơ bản
Một kịch bản tự động hóa thông thường với Selenium sẽ tuân theo các bước:
- Gửi yêu cầu truy cập URL bằng
get(). - Chờ đợi trang tải (sử dụng Implicit hoặc Explicit Wait).
- Tìm kiếm phần tử mục tiêu bằng các bộ lọc Locators.
- Thực hiện hành động như
send_keys()(nhập văn bản) hoặcclick()(nhấp chuột).