Nếu bạn muốn thực hiện bất kỳ hành động tự động nào trên trang web, bạn sẽ cần bộ định vị từ trang web đó. Đây là những mã định danh duy nhất được liên kết với các thành phần web như văn bản, nút, bảng, div, v.v.
Không thể tương tác với trang web nếu tập lệnh kiểm tra không thể tìm thấy các phần tử web. Selenium Webdriver cung cấp các kỹ thuật sau để định vị các phần tử web
Nhấp vào đây để quay lại hướng dẫn chính về Selenium Python
1.
2.
3.
4.
5.
6.
7.
8.
Hãy thảo luận chi tiết từng vấn đề một
Cách định vị các phần tử bằng Selenium Python
1. Xác định vị trí các yếu tố theo tên
Đó là một thông lệ tiêu chuẩn để xác định id duy nhất cho các phần tử web trong mã HTML. Tuy nhiên, có thể có trường hợp không có các mã định danh duy nhất này. Thay vào đó, những cái tên ở đó;
Here is the code snippet that demonstrates the use of method. Below code opens Google in the browser and performs a text search.
from selenium import webdriver import time from selenium.webdriver.common.keys import Keys driver = webdriver.Firefox[] driver.get["//google.com"] driver.maximize_window[] time.sleep[5] inputElement = driver.find_element_by_name["q"] inputElement.send_keys["Techbeamers"] inputElement.submit[] time.sleep[20] driver.close[]
Nếu mã HTML có nhiều phần tử web có thuộc tính “@name”, thì phương thức này sẽ chọn phần tử web đầu tiên từ danh sách. Nếu không có trận đấu nào xảy ra, một NoSuchElementException sẽ xuất hiện
2. Xác định vị trí các phần tử theo ID
Chúng tôi sử dụng phương pháp này khi thuộc tính Id cho phần tử có sẵn. Trên thực tế, đây là cách đáng tin cậy nhất và nhanh nhất để định vị một phần tử web cụ thể trên trang HTML. Một Id sẽ luôn là duy nhất cho bất kỳ đối tượng nào trên trang web. Vì vậy, chúng ta nên sử dụng thuộc tính Id để định vị các phần tử hơn các tùy chọn có sẵn khác
Here is the code snippet that demonstrates the use of the method. Below code opens Google in the browser and performs a text search.
from selenium import webdriver import time from selenium.webdriver.common.keys import Keys driver = webdriver.Firefox[] driver.get["//google.com"] driver.maximize_window[] time.sleep[5] inputElement = driver.find_element_by_id["lst-ib"] inputElement.send_keys["Techbeamers"] inputElement.submit[] time.sleep[20] driver.close[]
Nếu nhiều phần tử web có cùng giá trị id, thuộc tính, phương thức này sẽ trả về phần tử đầu tiên khớp với id. Nó sẽ đưa ra một NoSuchElementException nếu không có kết quả khớp
3. Xác định vị trí các phần tử bằng văn bản liên kết
We use this method for selecting hyperlinks from a web page. If multiple elements have the same link text, then this method selects the first element with a match. It works only on links [hyperlinks], that is why we call it .
Here is the code snippet that demonstrates the use of method. Below code opens Google in the browser and performs a text search. After that, it opens a Hyperlink with link text as “Python Tutorial.”
from selenium import webdriver import time from selenium.webdriver.common.keys import Keys driver = webdriver.Firefox[] driver.get["//google.com"] driver.maximize_window[] time.sleep[5] inputElement = driver.find_element_by_name["q"] inputElement.send_keys["Techbeamers"] inputElement.submit[] time.sleep[5] elem = driver.find_element_by_link_text["Python Tutorial"] elem.click[] time.sleep[20] driver.close[]
4. Xác định vị trí các phần tử bằng văn bản liên kết một phần
Để định vị phần tử bằng cách sử dụng phương thức văn bản liên kết, chúng tôi cần cung cấp văn bản Liên kết hoàn chỉnh. Tuy nhiên, phương pháp văn bản liên kết một phần cho phép chúng tôi chọn một siêu liên kết bằng cách chỉ đưa ra một phần của văn bản liên kết
Trong ví dụ trên nếu chúng ta sử dụng phương pháp văn bản liên kết một phần, thì mã sẽ trở thành như sau
from selenium import webdriver import time from selenium.webdriver.common.keys import Keys driver = webdriver.Firefox[] driver.get["//google.com"] driver.maximize_window[] time.sleep[5] inputElement = driver.find_element_by_name["q"] inputElement.send_keys["Techbeamers"] inputElement.submit[] time.sleep[5] elem = driver.find_element_by_partial_link_text["Python"] elem.click[] time.sleep[20] driver.close[]
Đoạn mã này mở trang web hướng dẫn Python như đoạn mã trên
5. Xác định vị trí các phần tử bằng Xpath
Một phương pháp hữu ích khác để định vị một phần tử là sử dụng biểu thức XPath. Chúng tôi sử dụng XPath khi không có thuộc tính tên hoặc id thích hợp trong mã để truy cập phần tử đó
XPath cho phép định vị một phần tử bằng cách sử dụng Tuyệt đối [không phải cách ưa thích] hoặc XPath Tương đối. XPath tuyệt đối xác định vị trí của một đối tượng từ thư mục gốc [html]. Tuy nhiên, sử dụng XPath tuyệt đối không phải là một phương pháp hiệu quả
Đó là bởi vì nếu chúng tôi thực hiện một thay đổi nhỏ trong mã trang web. XPath tuyệt đối sẽ thay đổi và webdriver có thể không định vị được phần tử bằng phần tử cũ
Trong trường hợp XPath tương đối, chúng tôi cố gắng xác định vị trí phần tử lân cận có thuộc tính id hoặc tên được cung cấp [lý tưởng là phần tử cha]. Bây giờ chúng ta có thể tính toán XPath của phần tử đích so với phần tử lân cận này. Cơ hội thay đổi XPath này là rất ít, do đó làm cho các bài kiểm tra của chúng tôi mạnh mẽ hơn
Như vậy, cả hai cách này đều giúp chúng ta định vị một phần tử có thuộc tính id hoặc name
Bộ định vị XPath cũng có thể sử dụng các thuộc tính khác ngoài id và tên để định vị phần tử
Để hiểu đường dẫn Tuyệt đối và Tương đối, hãy lấy mã HTML sau cho Đăng ký người dùng
Bây giờ chúng ta sẽ thử định vị các phần tử khác nhau có trên trang bằng XPath
Dưới đây là các XPath sẽ giúp Selenium Webdriver định vị phần tử biểu mẫu
form_element = driver.find_element_by_xpath["/html/body/form[1]"]
Đó là con đường Tuyệt đối. Sẽ thất bại nếu chúng tôi thực hiện bất kỳ thay đổi nào đối với mã HTML
Bây giờ sau đây là các Xpath tương đối
form_element = driver.find_element_by_xpath["//form[1]"]
Nó đánh dấu phần tử biểu mẫu đầu tiên
form_element = driver.find_element_by_xpath["//form[@id='signUpForm']"]
Nó sử dụng thuộc tính id có giá trị là “signUpForm” để định vị phần tử
We can locate element in similar manner as.
________số 8_______Nó sẽ trả về phần tử biểu mẫu đầu tiên có phần tử con 'đầu vào'. Phần tử đầu vào này có một thuộc tính có tên là 'tên' và giá trị 'emailId/mobileNo'
email_input = driver.find_element_by_xpath["//form[@id='loginForm']/input[1]"]
Nó sẽ chọn phần tử con 'đầu vào' đầu tiên của phần tử 'biểu mẫu'. Trong đó phần tử biểu mẫu có thuộc tính có tên là 'id' và giá trị 'signUpForm'
from selenium import webdriver import time from selenium.webdriver.common.keys import Keys driver = webdriver.Firefox[] driver.get["//google.com"] driver.maximize_window[] time.sleep[5] inputElement = driver.find_element_by_id["lst-ib"] inputElement.send_keys["Techbeamers"] inputElement.submit[] time.sleep[20] driver.close[]0
Nó trực tiếp chuyển đến phần tử 'đầu vào' có tên thuộc tính có giá trị là 'emailId/mobileNo'
6. Xác định vị trí các phần tử bằng CSS Selector
Phương pháp này cho phép bạn xác định vị trí các phần tử theo tên thuộc tính lớp
Nó sẽ trả về phần tử đầu tiên khớp với thuộc tính đầu vào. Nếu tìm kiếm không thành công, phương thức sẽ ném NoSuchElementException
Để minh họa, giả sử mã HTML bên dưới
from selenium import webdriver import time from selenium.webdriver.common.keys import Keys driver = webdriver.Firefox[] driver.get["//google.com"] driver.maximize_window[] time.sleep[5] inputElement = driver.find_element_by_id["lst-ib"] inputElement.send_keys["Techbeamers"] inputElement.submit[] time.sleep[20] driver.close[]1
Đoạn mã trên có một phần tử div duy nhất thuộc loại lớp "nút tròn". Để truy cập một lớp CSS, bạn có thể sử dụng dấu chấm [. ] biểu tượng. Cú pháp dưới đây đại diện cho bộ chọn CSS cho lớp “nút tròn”
from selenium import webdriver import time from selenium.webdriver.common.keys import Keys driver = webdriver.Firefox[] driver.get["//google.com"] driver.maximize_window[] time.sleep[5] inputElement = driver.find_element_by_id["lst-ib"] inputElement.send_keys["Techbeamers"] inputElement.submit[] time.sleep[20] driver.close[]2
Với đoạn mã dưới đây, bạn có thể xác định vị trí phần tử div đích theo chiến lược định vị CSS
from selenium import webdriver import time from selenium.webdriver.common.keys import Keys driver = webdriver.Firefox[] driver.get["//google.com"] driver.maximize_window[] time.sleep[5] inputElement = driver.find_element_by_id["lst-ib"] inputElement.send_keys["Techbeamers"] inputElement.submit[] time.sleep[20] driver.close[]3
7. Xác định vị trí các yếu tố theo Tagname
Phương pháp này cho phép bạn tìm phần tử web bằng cách chỉ định tên thẻ
Nó sẽ trả về phần tử đầu tiên có tên được chỉ định. Nếu tìm kiếm không thành công, phương thức sẽ ném NoSuchElementException
Để minh họa, giả sử mã HTML bên dưới
from selenium import webdriver import time from selenium.webdriver.common.keys import Keys driver = webdriver.Firefox[] driver.get["//google.com"] driver.maximize_window[] time.sleep[5] inputElement = driver.find_element_by_id["lst-ib"] inputElement.send_keys["Techbeamers"] inputElement.submit[] time.sleep[20] driver.close[]4
Đoạn mã trên có một thẻ tiêu đề với một số văn bản. Bạn có thể tìm thấy nó bằng mã dưới đây
from selenium import webdriver import time from selenium.webdriver.common.keys import Keys driver = webdriver.Firefox[] driver.get["//google.com"] driver.maximize_window[] time.sleep[5] inputElement = driver.find_element_by_id["lst-ib"] inputElement.send_keys["Techbeamers"] inputElement.submit[] time.sleep[20] driver.close[]5
8. Xác định vị trí các phần tử theo tên lớp
Phương pháp này cho phép bạn xác định vị trí các phần tử dựa trên tên lớp
Nó sẽ trả về phần tử đầu tiên với tên lớp đã cho. Nếu tìm kiếm không thành công, phương thức sẽ ném NoSuchElementException
Để minh họa, giả sử mã HTML bên dưới
from selenium import webdriver import time from selenium.webdriver.common.keys import Keys driver = webdriver.Firefox[] driver.get["//google.com"] driver.maximize_window[] time.sleep[5] inputElement = driver.find_element_by_id["lst-ib"] inputElement.send_keys["Techbeamers"] inputElement.submit[] time.sleep[20] driver.close[]6
Đoạn mã trên có một lớp có tên. Bạn có thể tìm thấy nó bằng mã dưới đây
from selenium import webdriver import time from selenium.webdriver.common.keys import Keys driver = webdriver.Firefox[] driver.get["//google.com"] driver.maximize_window[] time.sleep[5] inputElement = driver.find_element_by_id["lst-ib"] inputElement.send_keys["Techbeamers"] inputElement.submit[] time.sleep[20] driver.close[]7
Tóm tắt nhanh – Xác định vị trí các phần tử bằng Selenium Python
Chúng tôi hy vọng rằng bây giờ bạn đã biết cách sử dụng bộ định vị và tìm các phần tử bằng cách sử dụng chúng
Nếu bạn thực sự đã học được từ lớp học này, thì hãy chia sẻ nó với đồng nghiệp của bạn. Ngoài ra, hãy kết nối với các tài khoản mạng xã hội [Facebook/Twitter] của chúng tôi để nhận thông tin cập nhật kịp thời