17 Thiết lập thời gian chờ cho phần tử theo điều kiện trạng thái phần từ

Chuyên mục: Python
Cập nhật: 14/12/2024
17 Thiết lập thời gian chờ  cho phần tử theo điều kiện trạng thái phần từ

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ụng time.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ới chromedriver.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 (do assert 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:

  1. Truy cập trang web và tìm kiếm các sản phẩm với từ khóa "ber".
  2. Thêm các sản phẩm vào giỏ hàng.
  3. Truy cập giỏ hàng và tiến hành thanh toán.
  4. Áp dụng mã khuyến mãi "rahulshettyacademy".
  5. 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á.