Chuyên mục:
Python
Cập nhật:
14/12/2024
Sử dụng Selenium để tự động hóa trình duyệt web, thực hiện các bước tìm kiếm sản phẩm, thêm vào giỏ hàng, áp dụng mã khuyến mãi và in thông tin khuyến mãi ra màn hình. Có sử dụng điều kiện chờ phần tử xuất hiện.
1. Import các thư viện cần thiết:
pythonCopy codeimport time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
time
: Thư viện dùng để xử lý các chức năng liên quan đến thời gian, như tạm dừng chương trình (sử dụngtime.sleep()
).selenium.webdriver
: Thư viện Selenium giúp bạn tự động hóa trình duyệt web.selenium.webdriver.chrome.service.Service
: Để sử dụng dịch vụchromedriver.exe
cho việc điều khiển trình duyệt Chrome.selenium.webdriver.common.by.By
: Cung cấp các phương thức để xác định các phần tử trên trang (theo CSS, ID, XPath, v.v.).selenium.webdriver.support.expected_conditions
: Cung cấp các điều kiện để chờ đợi cho đến khi các phần tử có thể tương tác được.selenium.webdriver.support.wait.WebDriverWait
: Giúp thiết lập thời gian chờ đợi tối đa cho một điều kiện cụ thể.
2. Khởi tạo WebDriver:
pythonCopy codeservice_obj = Service("C:/Users/DELL/Desktop/chromedriver-win64/chromedriver.exe")
driver = webdriver.Chrome(service=service_obj)
- Dòng này tạo đối tượng
Service
để cung cấp đường dẫn tớichromedriver.exe
(driver giúp Selenium tương tác với trình duyệt Chrome). webdriver.Chrome(service=service_obj)
: Khởi tạo một phiên làm việc với Chrome.
pythonCopy codedriver.implicitly_wait(2)
- Đặt thời gian chờ mặc định là 2 giây, tức là Selenium sẽ chờ tối đa 2 giây để tìm kiếm các phần tử trên trang web trước khi báo lỗi nếu không tìm thấy.
3. Truy cập trang web và thực hiện tìm kiếm:
pythonCopy codedriver.get("https://rahulshettyacademy.com/seleniumPractise/#/")
- Mở trang web
https://rahulshettyacademy.com/seleniumPractise/#/
trong trình duyệt Chrome.
pythonCopy codedriver.find_element(By.CSS_SELECTOR,".search-keyword").send_keys("ber")
time.sleep(2)
- Tìm ô tìm kiếm với CSS selector
.search-keyword
và nhập từ khóa"ber"
vào ô tìm kiếm. - Dùng
time.sleep(2)
để tạm dừng chương trình trong 2 giây, nhằm đợi kết quả tìm kiếm xuất hiện.
4. Tìm và chọn các sản phẩm:
pythonCopy coderesults = driver.find_elements(By.XPATH,"//div[@class='product']/div")
count = len(results)
assert count>0
- Dòng này tìm tất cả các phần tử sản phẩm trên trang bằng XPath
//div[@class='product']/div
. - Kiểm tra số lượng sản phẩm (
count
). Nếu không có sản phẩm nào, sẽ ném lỗi (doassert count > 0
).
pythonCopy codefor result in results:
result.find_element(By.XPATH,"//div[@class='product']/div/button").click()
- Lặp qua từng sản phẩm trong danh sách
results
, tìm nút "Add to Cart" (dùng XPath để tìm nút) và nhấn vào mỗi nút, thêm sản phẩm vào giỏ hàng.
5. Truy cập giỏ hàng và tiến hành thanh toán:
pythonCopy codedriver.find_element(By.CSS_SELECTOR,"img[alt='Cart']").click()
driver.find_element(By.XPATH,"//button[text()='PROCEED TO CHECKOUT']").click()
- Nhấn vào biểu tượng giỏ hàng (
img[alt='Cart']
). - Tiến hành thanh toán bằng cách nhấn nút "PROCEED TO CHECKOUT" (dùng XPath tìm nút này).
6. Áp dụng mã khuyến mãi:
pythonCopy codedriver.find_element(By.CSS_SELECTOR,".promoCode").send_keys("rahulshettyacademy")
driver.find_element(By.CSS_SELECTOR,".promoBtn").click()
- Nhập mã khuyến mãi
"rahulshettyacademy"
vào trường mã giảm giá (.promoCode
). - Nhấn vào nút "Apply" để áp dụng mã khuyến mãi (
.promoBtn
).
7. Chờ và lấy thông tin khuyến mãi:
pythonCopy codewait = WebDriverWait(driver,10)
wait.until(expected_conditions.presence_of_element_located((By.CSS_SELECTOR,".promoInfo")))
- Khởi tạo đối tượng
WebDriverWait
với thời gian chờ tối đa là 10 giây. - Chờ đợi cho đến khi phần tử có class
promoInfo
xuất hiện trên trang, tức là khi thông báo khuyến mãi được hiển thị (vì có thể mất vài giây để hệ thống xử lý và hiển thị thông báo).
8. In kết quả khuyến mãi:
pythonCopy codeprint(driver.find_element(By.CLASS_NAME,"promoInfo").text)
- Lấy văn bản (text) từ phần tử có class
promoInfo
và in ra màn hình. Phần tử này chứa thông tin về mã khuyến mãi (thông thường là thông báo về giảm giá đã được áp dụng thành công).
Tổng kết:
Đoạn mã trên tự động:
- Truy cập trang web và tìm kiếm các sản phẩm với từ khóa
"ber"
. - Thêm các sản phẩm vào giỏ hàng.
- Truy cập giỏ hàng và tiến hành thanh toán.
- Áp dụng mã khuyến mãi
"rahulshettyacademy"
. - Chờ và in ra thông báo khuyến mãi hiển thị trên trang.
Đoạn mã này khá hữu ích để tự động kiểm tra và thực hiện các thao tác mua hàng trên các trang web mua sắm hỗ trợ mã giảm giá.