Chuyên mục:
Python
Cập nhật:
20/12/2024
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
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.
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.
- Nhập lớp
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.
- Nhập lớp
Khởi tạo WebDriver:
pythonCopy codeservice_obj = Service("C:/Users/DELL/Desktop/chromedriver-win64/chromedriver.exe")
driver = webdriver.Chrome(service=service_obj)
service_obj = Service(...)
:- Khởi tạo đối tượng
Service
với đường dẫn tớichromedriver.exe
.chromedriver.exe
là công cụ cần thiết để điều khiển trình duyệt Google Chrome.
- Khởi tạo đối tượng
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ụngchromedriver.exe
để điều khiển trình duyệt Chrome.
- 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
Khối try-finally
:
pythonCopy codetry:
...
finally:
driver.quit()
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ã.
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)
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
.
- 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
Mở trang web:
pythonCopy codedriver.get("https://the-internet.herokuapp.com/iframe")
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.
- Mở URL
Chuyển vào iframe:
pythonCopy codedriver.switch_to.frame("mce_0_ifr")
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.
- Chuyển ngữ cảnh của Selenium từ trang chính sang iframe có ID là
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)
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"
.
- Đây là đoạn mã JavaScript để đặt nội dung của phần tử có ID
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()
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)
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.
- Tìm phần tử
.text
:- Lấy văn bản từ phần tử
h3
.
- Lấy văn bản từ phần tử
print(...)
:- In tiêu đề lên màn hình. Kết quả mong đợi:cssCopy code
An iFrame containing the TinyMCE WYSIWYG Editor
- In tiêu đề lên màn hình. Kết quả mong đợi:cssCopy code
Đóng trình duyệt:
pythonCopy codedriver.quit()
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:
- Mở trang web có iframe.
- 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. - Thoát khỏi iframe, lấy tiêu đề của trang chính và in ra màn hình.
- Đóng trình duyệt khi hoàn thành.