Chuyên mục:
Python
Cập nhật:
14/12/2024
Đoạn mã sau sẽ thực hiện các thao tác tự động như tìm kiếm sản phẩm, thêm sản phẩm vào giỏ hàng, đi đến trang thanh toán và áp dụng mã giảm giá trên một trang web bán hàng. Và sử dụng hàm đợi Waits.
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
service_obj = Service("C:/Users/DELL/Desktop/chromedriver-win64/chromedriver.exe")
driver = webdriver.Chrome(service=service_obj)
driver.implicitly_wait(5)
# 5 giây là thời gian chờ tối đa, tuy nhiên nếu xử lý xong sớm hơn là 2s thì nó chuyển qua dòng code tiếp theo luôn mà ko cần chờ đủ 5s ( tiết kiệm 3s)
driver.get("https://rahulshettyacademy.com/seleniumPractise/#/")
driver.find_element(By.CSS_SELECTOR,".search-keyword").send_keys("ber")
time.sleep(2)
results = driver.find_elements(By.XPATH,"//div[@class='product']/div")
# find_elements trả về 1 list[]
count = len(results)
assert count>0
for result in results:
result.find_element(By.XPATH,"//div[@class='product']/div/button").click()
driver.find_element(By.CSS_SELECTOR,"img[alt='Cart']").click()
driver.find_element(By.XPATH,"//button[text()='PROCEED TO CHECKOUT']").click()
driver.find_element(By.CSS_SELECTOR,".promoCode").send_keys("rahulshettyacademy")
driver.find_element(By.CSS_SELECTOR,".promoBtn").click()
print(driver.find_element(By.CLASS_NAME,"promoInfo").text)
Dưới đây là giải thích chi tiết về từng dòng mã Python của bạn sử dụng thư viện Selenium để tự động hóa trình duyệt:
pythonCopy codeimport time
- Giải thích: Dòng này nhập module
time
, giúp bạn làm việc với thời gian trong Python. Cụ thể, bạn có thể sử dụngtime.sleep()
để dừng chương trình một khoảng thời gian nhất định.
pythonCopy codefrom selenium import webdriver
- Giải thích: Dòng này nhập
webdriver
từ thư viện Selenium.webdriver
là đối tượng chính giúp bạn điều khiển trình duyệt. Bạn sẽ sử dụng nó để mở trình duyệt, truy cập các trang web, tìm kiếm và thao tác với các phần tử trên trang.
pythonCopy codefrom selenium.webdriver.chrome.service import Service
- Giải thích: Dòng này nhập
Service
từselenium.webdriver.chrome.service
. Đây là đối tượng giúp cấu hình và khởi động dịch vụ cho trình duyệt Chrome thông quachromedriver.exe
.
pythonCopy codefrom selenium.webdriver.common.by import By
- Giải thích: Dòng này nhập
By
từselenium.webdriver.common.by
.By
giúp bạn xác định cách chọn các phần tử trên trang web, chẳng hạn như theo ID, CSS selector, XPath, v.v.
pythonCopy codeservice_obj = Service("C:/Users/DELL/Desktop/chromedriver-win64/chromedriver.exe")
- Giải thích: Tạo đối tượng
Service
và chỉ định đường dẫn đến tệpchromedriver.exe
của Chrome.chromedriver
là phần mềm trung gian giúp Selenium điều khiển trình duyệt Chrome.
pythonCopy codedriver = webdriver.Chrome(service=service_obj)
- Giải thích: Khởi tạo một đối tượng
driver
để điều khiển trình duyệt Chrome.webdriver.Chrome()
yêu cầu một đối tượngService
để kết nối vớichromedriver
và điều khiển trình duyệt.
pythonCopy codedriver.implicitly_wait(5)
- Giải thích: Thiết lập một khoảng thời gian chờ mặc định cho các hành động của Selenium. Nếu Selenium không tìm thấy một phần tử ngay lập tức, nó sẽ chờ tối đa 5 giây trước khi báo lỗi. Cài đặt này giúp chương trình hoạt động mượt mà hơn khi các phần tử chưa tải xong.
pythonCopy codedriver.get("https://rahulshettyacademy.com/seleniumPractise/#/")
- Giải thích: Dòng này yêu cầu trình duyệt mở trang web
https://rahulshettyacademy.com/seleniumPractise#/
. Đây là trang web bạn sẽ thao tác trong quá trình tự động hóa.
pythonCopy codedriver.find_element(By.CSS_SELECTOR,".search-keyword").send_keys("ber")
- Giải thích: Dòng này tìm phần tử trên trang web bằng cách sử dụng CSS selector
".search-keyword"
(tìm ô tìm kiếm) và gửi vào đó từ khóa "ber". Phương thứcsend_keys()
mô phỏng việc nhập văn bản vào ô tìm kiếm.
pythonCopy codetime.sleep(2)
- Giải thích: Tạm dừng chương trình trong 2 giây. Điều này thường được sử dụng khi bạn muốn chờ đợi một hành động hoặc hiệu ứng nào đó hoàn tất trước khi tiếp tục.
pythonCopy coderesults = driver.find_elements(By.XPATH,"//div[@class='product']/div")
- Giải thích: Tìm tất cả các phần tử có cấu trúc XPath
//div[@class='product']/div
, tức là các sản phẩm trong danh sách. Phương thứcfind_elements()
trả về một danh sách các phần tử khớp với XPath này.
pythonCopy codecount = len(results)
- Giải thích: Tính số lượng các phần tử tìm được từ bước trên (tức là số sản phẩm hiện có trong kết quả tìm kiếm). Lưu số lượng vào biến
count
.
pythonCopy codeassert count>0
- Giải thích: Kiểm tra xem số lượng kết quả tìm được có lớn hơn 0 hay không. Nếu không, chương trình sẽ báo lỗi. Câu lệnh này đảm bảo rằng có ít nhất một sản phẩm được tìm thấy.
pythonCopy codefor result in results:
result.find_element(By.XPATH,"//div[@class='product']/div/button").click()
- Giải thích: Lặp qua từng kết quả trong danh sách
results
(mỗi phần tử là một sản phẩm). Với mỗi sản phẩm, chương trình sẽ tìm nút "Add to Cart" (thêm vào giỏ hàng) bằng XPath và thực hiện hành động nhấp chuột vào nút đó (click).
pythonCopy codedriver.find_element(By.CSS_SELECTOR,"img[alt='Cart']").click()
- Giải thích: Tìm biểu tượng giỏ hàng (hình ảnh có thuộc tính
alt='Cart'
) và nhấp vào đó để mở giỏ hàng.
pythonCopy codedriver.find_element(By.XPATH,"//button[text()='PROCEED TO CHECKOUT']").click()
- Giải thích: Tìm nút "PROCEED TO CHECKOUT" trong giỏ hàng và nhấp vào nút đó để tiếp tục đến trang thanh toán.
pythonCopy codedriver.find_element(By.CSS_SELECTOR,".promoCode").send_keys("rahulshettyacademy")
- Giải thích: Tìm ô nhập mã giảm giá (dựa vào CSS selector
.promoCode
) và gửi mã "rahulshettyacademy" vào đó.
pythonCopy codedriver.find_element(By.CSS_SELECTOR,".promoBtn").click()
- Giải thích: Tìm nút "Apply" (hoặc "Promo") dựa vào CSS selector
.promoBtn
và nhấp vào nút để áp dụng mã giảm giá.
pythonCopy codeprint(driver.find_element(By.CLASS_NAME,"promoInfo").text)
Giải thích: Tìm phần tử có class promoInfo
, lấy nội dung văn bản của nó và in ra. Đây là thông báo về việc áp dụng mã giảm giá, chẳng hạn như thông báo thành công hoặc thất bại.