Tìm phần tử python

Có nhiều chiến lược khác nhau để xác định vị trí các phần tử trong một trang. Bạn có thể sử dụng cái phù hợp nhất cho trường hợp của mình. Selenium cung cấp phương pháp sau để xác định vị trí các phần tử trong một trang

  • find_element

Để tìm nhiều phần tử (các phương thức này sẽ trả về một danh sách)

  • find_elements

Ví dụ sử dụng

from selenium.webdriver.common.by import By

driver.find_element(By.XPATH, '//button[text()="Some text"]')
driver.find_elements(By.XPATH, '//button')

Các thuộc tính có sẵn cho lớp Theo được sử dụng để định vị các phần tử trên một trang. Đây là những thuộc tính có sẵn cho Theo lớp

ID = "id"
NAME = "name"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"

Lớp 'By' được sử dụng để chỉ định thuộc tính nào được sử dụng để định vị các phần tử trên một trang. Đây là những cách khác nhau mà các thuộc tính được sử dụng để xác định vị trí các phần tử trên một trang

find_element(By.ID, "id")
find_element(By.NAME, "name")
find_element(By.XPATH, "xpath")
find_element(By.LINK_TEXT, "link text")
find_element(By.PARTIAL_LINK_TEXT, "partial link text")
find_element(By.TAG_NAME, "tag name")
find_element(By.CLASS_NAME, "class name")
find_element(By.CSS_SELECTOR, "css selector")

Nếu bạn muốn định vị một số phần tử có cùng thuộc tính, hãy thay thế find_element bằng find_elements

4. 1. Định vị theo Id¶

Sử dụng cái này khi bạn biết thuộc tính id của một phần tử. Với chiến lược này, phần tử đầu tiên có thuộc tính id phù hợp sẽ được trả về. Nếu không có phần tử nào có thuộc tính id phù hợp, thì

find_element(By.ID, "id")
find_element(By.NAME, "name")
find_element(By.XPATH, "xpath")
find_element(By.LINK_TEXT, "link text")
find_element(By.PARTIAL_LINK_TEXT, "partial link text")
find_element(By.TAG_NAME, "tag name")
find_element(By.CLASS_NAME, "class name")
find_element(By.CSS_SELECTOR, "css selector")
0 sẽ được nâng lên

Chẳng hạn, hãy xem xét nguồn trang này

<html>
 <body>
  <form id="loginForm">
   <input name="username" type="text" />
   <input name="password" type="password" />
   <input name="continue" type="submit" value="Login" />
  </form>
 </body>
</html>

Phần tử biểu mẫu có thể được định vị như thế này

login_form = driver.find_element(By.ID, 'loginForm')

4. 2. Định vị theo tên¶

Sử dụng điều này khi bạn biết thuộc tính tên của một phần tử. Với chiến lược này, phần tử đầu tiên có thuộc tính tên phù hợp sẽ được trả về. Nếu không có phần tử nào có thuộc tính tên phù hợp, thì

find_element(By.ID, "id")
find_element(By.NAME, "name")
find_element(By.XPATH, "xpath")
find_element(By.LINK_TEXT, "link text")
find_element(By.PARTIAL_LINK_TEXT, "partial link text")
find_element(By.TAG_NAME, "tag name")
find_element(By.CLASS_NAME, "class name")
find_element(By.CSS_SELECTOR, "css selector")
0 sẽ được nâng lên

Chẳng hạn, hãy xem xét nguồn trang này

<html>
 <body>
  <form id="loginForm">
   <input name="username" type="text" />
   <input name="password" type="password" />
   <input name="continue" type="submit" value="Login" />
   <input name="continue" type="button" value="Clear" />
  </form>
</body>
</html>

Các yếu tố tên người dùng và mật khẩu có thể được định vị như thế này

________số 8

Thao tác này sẽ cung cấp nút “Đăng nhập” khi nó xuất hiện trước nút “Xóa”

continue = driver.find_element(By.NAME, 'continue')

4. 3. Định vị bằng XPath¶

XPath là ngôn ngữ được sử dụng để định vị các nút trong tài liệu XML. Vì HTML có thể là một triển khai của XML (XHTML), người dùng Selenium có thể tận dụng ngôn ngữ mạnh mẽ này để nhắm mục tiêu các phần tử trong ứng dụng web của họ. XPath hỗ trợ các phương pháp định vị đơn giản theo thuộc tính id hoặc tên và mở rộng chúng bằng cách mở ra tất cả các loại khả năng mới, chẳng hạn như định vị hộp kiểm thứ ba trên trang

Một trong những lý do chính để sử dụng XPath là khi bạn không có thuộc tính id hoặc tên phù hợp cho phần tử bạn muốn định vị. Bạn có thể sử dụng XPath để xác định vị trí phần tử theo thuật ngữ tuyệt đối (không nên) hoặc liên quan đến phần tử có thuộc tính id hoặc tên. Bộ định vị XPath cũng có thể được sử dụng để chỉ định các phần tử thông qua các thuộc tính khác ngoài id và tên

XPath tuyệt đối chứa vị trí của tất cả các phần tử từ thư mục gốc (html) và kết quả là có khả năng bị lỗi chỉ với một điều chỉnh nhỏ nhất đối với ứng dụng. Bằng cách tìm phần tử lân cận có thuộc tính id hoặc tên (lý tưởng nhất là phần tử gốc), bạn có thể định vị phần tử đích của mình dựa trên mối quan hệ. Điều này ít có khả năng thay đổi hơn và có thể làm cho các bài kiểm tra của bạn mạnh mẽ hơn

Chẳng hạn, hãy xem xét nguồn trang này

<html>
 <body>
  <form id="loginForm">
   <input name="username" type="text" />
   <input name="password" type="password" />
   <input name="continue" type="submit" value="Login" />
   <input name="continue" type="button" value="Clear" />
  </form>
</body>
</html>

Các yếu tố hình thức có thể được định vị như thế này

ID = "id"
NAME = "name"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
1

  1. Đường dẫn tuyệt đối (sẽ bị hỏng nếu HTML chỉ bị thay đổi một chút)
  2. Phần tử biểu mẫu đầu tiên trong HTML
  3. Phần tử biểu mẫu có id thuộc tính được đặt thành loginForm

Phần tử tên người dùng có thể được định vị như thế này

ID = "id"
NAME = "name"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
0

  1. Phần tử biểu mẫu đầu tiên có phần tử con đầu vào có tên được đặt thành tên người dùng
  2. Phần tử con đầu vào đầu tiên của phần tử biểu mẫu với id thuộc tính được đặt thành loginForm
  3. Phần tử đầu vào đầu tiên có tên thuộc tính được đặt thành tên người dùng

Phần tử nút "Xóa" có thể được định vị như thế này

ID = "id"
NAME = "name"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
1

  1. Đầu vào với tên thuộc tính được đặt thành tiếp tục và loại thuộc tính được đặt thành nút
  2. Phần tử con đầu vào thứ tư của phần tử biểu mẫu với id thuộc tính được đặt thành loginForm

Những ví dụ này bao gồm một số điều cơ bản, nhưng để tìm hiểu thêm, các tài liệu tham khảo sau đây được khuyến nghị

  • Hướng dẫn XPath của W3Schools
  • Đề xuất W3C XPath
  • Hướng dẫn XPath - với các ví dụ tương tác

Đây là một số Tiện ích bổ sung rất hữu ích có thể hỗ trợ khám phá XPath của một phần tử

  • xPath Finder - Plugin lấy phần tử xPath
  • Trình trợ giúp XPath - dành cho Google Chrome

4. 4. Định vị siêu liên kết bằng văn bản liên kết¶

Sử dụng điều này khi bạn biết văn bản liên kết được sử dụng trong thẻ neo. Với chiến lược này, phần tử đầu tiên có văn bản liên kết khớp với giá trị được cung cấp sẽ được trả về. Nếu không có phần tử nào có thuộc tính văn bản liên kết phù hợp, thì

find_element(By.ID, "id")
find_element(By.NAME, "name")
find_element(By.XPATH, "xpath")
find_element(By.LINK_TEXT, "link text")
find_element(By.PARTIAL_LINK_TEXT, "partial link text")
find_element(By.TAG_NAME, "tag name")
find_element(By.CLASS_NAME, "class name")
find_element(By.CSS_SELECTOR, "css selector")
0 sẽ được nâng lên

Chẳng hạn, hãy xem xét nguồn trang này

ID = "id"
NAME = "name"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
2

tiếp tục. liên kết html có thể được định vị như thế này

ID = "id"
NAME = "name"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
3

4. 5. Định vị các phần tử theo tên thẻ¶

Sử dụng điều này khi bạn muốn định vị một phần tử bằng cú pháp bộ chọn CSS. Với chiến lược này, phần tử đầu tiên khớp với bộ chọn CSS đã cho sẽ được trả về. Nếu không có phần tử nào phù hợp với bộ chọn CSS được cung cấp, thì

find_element(By.ID, "id")
find_element(By.NAME, "name")
find_element(By.XPATH, "xpath")
find_element(By.LINK_TEXT, "link text")
find_element(By.PARTIAL_LINK_TEXT, "partial link text")
find_element(By.TAG_NAME, "tag name")
find_element(By.CLASS_NAME, "class name")
find_element(By.CSS_SELECTOR, "css selector")
0 sẽ được nâng lên