20 Kĩ thuật xử lý Frame trong Selenium

Chuyên mục: Python
Cập nhật: 20/12/2024
20 Kĩ thuật xử lý Frame trong Selenium

Sử dụng selenium và javascript để thay đổi nội dung trong frame:

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)
try:
    driver.implicitly_wait(2)

    driver.get("https://the-internet.herokuapp.com/iframe")
    
    driver.switch_to.frame("mce_0_ifr")
    
    editor_script = "document.getElementById('tinymce').innerHTML = 'I am able to automate frames';"
    driver.execute_script(editor_script)
    
    driver.switch_to.default_content()
    
    print(driver.find_element(By.CSS_SELECTOR, "h3").text)

finally:
    driver.quit()

Import thư viện và chuẩn bị:

pythonCopy codefrom selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
  1. from selenium import webdriver:
    • Nhập thư viện Selenium để sử dụng WebDriver, công cụ tự động hóa trình duyệt.
  2. from selenium.webdriver.chrome.service import Service:
    • Nhập lớp Service để khởi tạo trình điều khiển (driver) cho Chrome.
  3. from selenium.webdriver.common.by import By:
    • Nhập lớp By để xác định các phần tử web bằng nhiều phương thức như ID, CSS_SELECTOR, v.v.

Khởi tạo WebDriver:

pythonCopy codeservice_obj = Service("C:/Users/DELL/Desktop/chromedriver-win64/chromedriver.exe")
driver = webdriver.Chrome(service=service_obj)
  1. service_obj = Service(...):
    • Khởi tạo đối tượng Service với đường dẫn tới chromedriver.exe. chromedriver.exe là công cụ cần thiết để điều khiển trình duyệt Google Chrome.
  2. driver = webdriver.Chrome(service=service_obj):
    • Tạo một phiên làm việc của trình duyệt Chrome bằng cách truyền đối tượng Service. Selenium sẽ sử dụng chromedriver.exe để điều khiển trình duyệt Chrome.

Khối try-finally:

pythonCopy codetry:
    ...
finally:
    driver.quit()
  1. try:
    • Đảm bảo rằng trình duyệt sẽ được đóng trong mọi tình huống, kể cả khi xảy ra lỗi trong mã.
  2. finally: driver.quit():
    • Thoát khỏi trình duyệt khi các tác vụ hoàn tất hoặc khi gặp lỗi.

Cài đặt thời gian chờ ngầm định:

pythonCopy codedriver.implicitly_wait(2)
  1. driver.implicitly_wait(2):
    • Cài đặt thời gian chờ mặc định (2 giây) để Selenium tìm thấy các phần tử trên trang trước khi báo lỗi NoSuchElementException.

Mở trang web:

pythonCopy codedriver.get("https://the-internet.herokuapp.com/iframe")
  1. driver.get(...):
    • Mở URL https://the-internet.herokuapp.com/iframe trong trình duyệt. Đây là trang chứa một trình soạn thảo văn bản WYSIWYG (tinymce) nằm trong iframe.

Chuyển vào iframe:

pythonCopy codedriver.switch_to.frame("mce_0_ifr")
  1. driver.switch_to.frame(...):
    • Chuyển ngữ cảnh của Selenium từ trang chính sang iframe có ID là "mce_0_ifr". Sau khi thực hiện, các thao tác tiếp theo sẽ được thực hiện trong iframe này.

Chỉnh sửa nội dung bằng JavaScript:

pythonCopy codeeditor_script = "document.getElementById('tinymce').innerHTML = 'I am able to automate frames';"
driver.execute_script(editor_script)
  1. editor_script = ...:
    • Đây là đoạn mã JavaScript để đặt nội dung của phần tử có ID "tinymce" (trình soạn thảo WYSIWYG) thành chuỗi "I am able to automate frames".
  2. driver.execute_script(editor_script):
    • Thực thi đoạn mã JavaScript trong trình duyệt thông qua Selenium.

Trở về ngữ cảnh trang chính:

pythonCopy codedriver.switch_to.default_content()
  1. driver.switch_to.default_content():
    • Trở lại ngữ cảnh của trang chính (thoát khỏi iframe). Sau dòng này, mọi thao tác sẽ được thực hiện trên trang chính.

Lấy và in tiêu đề:

pythonCopy codeprint(driver.find_element(By.CSS_SELECTOR, "h3").text)
  1. driver.find_element(By.CSS_SELECTOR, "h3"):
    • Tìm phần tử h3 trên trang chính bằng cách sử dụng bộ chọn CSS (CSS_SELECTOR). Phần tử này là tiêu đề của trang.
  2. .text:
    • Lấy văn bản từ phần tử h3.
  3. print(...):
    • In tiêu đề lên màn hình. Kết quả mong đợi:cssCopy codeAn iFrame containing the TinyMCE WYSIWYG Editor

Đóng trình duyệt:

pythonCopy codedriver.quit()
  1. driver.quit():
    • Đóng trình duyệt và kết thúc phiên làm việc của Selenium. Điều này giúp giải phóng tài nguyên hệ thống.

Tóm tắt hoạt động:

  1. Mở trang web có iframe.
  2. Chuyển vào iframe và chỉnh sửa nội dung của trình soạn thảo tinymce bằng JavaScript.
  3. Thoát khỏi iframe, lấy tiêu đề của trang chính và in ra màn hình.
  4. Đóng trình duyệt khi hoàn thành.