Tìm phần tử Selenium Python

Phần này sẽ làm nổi bật hai trường hợp sử dụng để chứng minh việc sử dụng các phương thức

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[]
0 khác nhau. Thông thường, chúng tôi muốn cạo dữ liệu từ các bảng hoặc văn bản bài viết. Do đó, hai bản trình diễn bao gồm các trường hợp sử dụng này

Hãy để chúng tôi kiểm tra trang web trực tiếp này của một bài báo trực tuyến. Bài viết trên trang này có nhiều tiểu mục, mỗi tiểu mục có nhiều đoạn văn và thậm chí có cả gạch đầu dòng. Giả sử rằng chúng tôi muốn cạo toàn bộ văn bản của bài viết. Một cách thú vị để làm điều đó là cạo tất cả các tiểu mục riêng biệt trước và sau đó nối chúng lại với nhau. Ưu điểm của cách làm này là chúng ta cũng có thể lấy văn bản của từng tiểu mục

Hãy để chúng tô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_name["q"]
inputElement.send_keys["Techbeamers"]
inputElement.submit[]
time.sleep[20]

driver.close[]
1 trang web này. Hãy để chúng tôi di chuyển con trỏ đến phần tử DOM xác định khu vực nội dung bài viết. Phía dưới cái này

phần tử, chúng ta có thể thấy rằng các tiêu đề tiểu mục đều có tên thẻ bắt đầu bằng

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[]
2, các đoạn văn có một

tên thẻ và các phần dấu đầu dòng có

    tên thẻ. Các phần tử có các tên thẻ này đều song song với nhau, thay vì được nhúng trong cấu trúc phân cấp. Thiết kế này quy định rằng chúng ta không nên viết một vòng lặp trong tập lệnh của mình để truy cập chúng, chẳng hạn như để truy cập từng đoạn trong tiểu mục. Một điểm khác cần lưu ý là ở đây chúng tôi sử dụng từ điển Python để lưu trữ văn bản của từng tiểu mục. Đối với mỗi cặp khóa-giá trị trong từ điển này, khóa lưu trữ tiêu đề tiểu mục và giá trị lưu trữ các đoạn văn bản của nó. Vì vậy, đây là một cấu trúc dữ liệu thuận tiện để sử dụng cho trường hợp sử dụng này. Chương trình sau đây thực hiện chiến lược của chúng tôi ở trên để cạo toàn bộ văn bản của bài viết

    # same as the set up chunk of code
    ...
    journalAddress = "//www.federalregister.gov/documents/2013/09/24/2013-21228/affirmative-action-and-nondiscrimination-obligations-of-contractors-and-subcontractors-regarding"
    # same as the set up chunk of code
    ...
    time.sleep[2]
    
    articleObjects = driver.find_elements_by_xpath['//div[@id="fulltext_content_area"]/*']
    
    articleDictionary = dict[]
    myKey = ""
    myValue_total = ""

    Chương trình trên đã đặt tất cả các phần tử web liên quan đến nội dung bài báo vào một danh sách gọi là “articleObjects”. Vì tất cả các phần tử web này song song với nhau chứ không phải trong một cấu trúc lồng nhau, nên chúng tôi chỉ cần sử dụng một cấp độ của vòng lặp for để lặp từng phần tử web trong danh sách và đưa nội dung của nó vào đúng vị trí trong từ điển mà chúng tôi đã tạo như . Nếu tên thẻ của một thành phần web trong danh sách bắt đầu bằng “h”, thì nội dung của nó phải là tiêu đề tiểu mục. Chúng tôi cạo nội dung của nó thành một biến chuỗi “myKey”. Nếu tên thẻ của một phần tử web trong danh sách bắt đầu bằng “p” hoặc “ul”, thì nội dung của nó phải là một đoạn văn hoặc một tập hợp các dấu đầu dòng bên dưới tiêu đề tiểu mục đó. Chúng tôi cạo nội dung của nó và nối nó vào một biến chuỗi “myValue_total”. Khi chúng ta gặp tiêu đề tiểu mục tiếp theo, chương trình phải nối thêm tất cả các đoạn văn và dấu đầu dòng bên dưới tiêu đề tiểu mục hiện tại và lưu chúng vào một chuỗi “myValue_total”. Tại thời điểm này, chúng tôi nhập cặp khóa-giá trị - tiêu đề tiểu mục hiện tại làm khóa và tất cả các đoạn văn và dấu đầu dòng bên dưới tiêu đề tiểu mục này làm giá trị của nó - vào từ điển. Sau đó, chúng tôi thay thế khóa là tiêu đề tiểu mục hiện tại bằng tiêu đề tiểu mục tiếp theo và lặp lại các bước trên

    for i in range[len[articleObjects]]:
        tagName = articleObjects[i].tag_name
        if tagName.startswith["h"]:
            if myKey:
                articleDictionary[myKey] = myValue_total
                myKey = ""
                myValue_total = ""
            myKey = articleObjects[i].get_attribute["innerText"]
        if tagName.startswith["p"]:
            myValue = articleObjects[i].get_attribute["innerText"]
            myValue_total = myValue_total + myValue
        if tagName.startswith["ul"]:
            myBullets = articleObjects[i].find_elements_by_tag_name['li']
            for j in range[len[myBullets]]:
                myBullet = myBullets[j].get_attribute["innerText"]
                myValue_total = myValue_total + myBullet
    driver.close[]

    Sau khi hoàn thành vòng lặp, chúng tôi đã loại bỏ tất cả các phần phụ một cách riêng biệt và lưu trữ chúng vào một từ điển. Cuối cùng, chúng ta chỉ cần lặp từng cặp khóa-giá trị trên từ điển này và nối nội dung của chúng lại với nhau khi chúng ta lặp qua từ điển

    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. Định vị phần tử theo tên
    2. Định vị phần tử theo ID
    3. Định vị phần tử theo văn bản liên kết
    4. Định vị phần tử bằng văn bản liên kết một phần
    5. Định vị phần tử bằng XPath
    6. Định vị phần tử bằng Bộ chọn CSS
    7. Định vị phần tử theo tên thẻ
    8. Định vị phần tử theo tên lớp

    Hãy thảo luận chi tiết từng vấn đề một

    Cách xác định vị trí 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 thức 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

    ________số 8

    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.

    for i in range[len[articleObjects]]:
        tagName = articleObjects[i].tag_name
        if tagName.startswith["h"]:
            if myKey:
                articleDictionary[myKey] = myValue_total
                myKey = ""
                myValue_total = ""
            myKey = articleObjects[i].get_attribute["innerText"]
        if tagName.startswith["p"]:
            myValue = articleObjects[i].get_attribute["innerText"]
            myValue_total = myValue_total + myValue
        if tagName.startswith["ul"]:
            myBullets = articleObjects[i].find_elements_by_tag_name['li']
            for j in range[len[myBullets]]:
                myBullet = myBullets[j].get_attribute["innerText"]
                myValue_total = myValue_total + myBullet
    driver.close[]
    0

    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'

    for i in range[len[articleObjects]]:
        tagName = articleObjects[i].tag_name
        if tagName.startswith["h"]:
            if myKey:
                articleDictionary[myKey] = myValue_total
                myKey = ""
                myValue_total = ""
            myKey = articleObjects[i].get_attribute["innerText"]
        if tagName.startswith["p"]:
            myValue = articleObjects[i].get_attribute["innerText"]
            myValue_total = myValue_total + myValue
        if tagName.startswith["ul"]:
            myBullets = articleObjects[i].find_elements_by_tag_name['li']
            for j in range[len[myBullets]]:
                myBullet = myBullets[j].get_attribute["innerText"]
                myValue_total = myValue_total + myBullet
    driver.close[]
    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

    Làm cách nào để tìm phần tử trong Selenium Python?

    Python – phương thức find_element[] trong Selenium . Id về cơ bản là thuộc tính duy nhất được gán cho các thành phần của trang web như nút, hình ảnh, tiêu đề, v.v. Ghi chú. Phần tử đầu tiên có giá trị thuộc tính “id” khớp với vị trí sẽ được trả về. find_element[] method is used. Id is basically unique attribute assigned to the elements of the web page such as buttons, image, heading etc. Note: The first element with the “id” attribute value matching the location will be returned.

    Làm cách nào để sử dụng Find_element trong Selenium Python?

    Thêm bộ định vị để định vị các phần tử đơn lẻ . Phần tử đầu tiên có giá trị thuộc tính tên khớp với vị trí sẽ được trả về. Phần tử đầu tiên có cú pháp xpath khớp với vị trí sẽ được trả về. The first element with the id attribute value matching the location will be returned. The first element with the name attribute value matching the location will be returned. The first element with the xpath syntax matching the location will be returned.

    Làm cách nào để sử dụng phần tử tìm kiếm trong Selenium?

    Cách sử dụng Selenium findElement .
    Tìm theo ID. ID được xác định duy nhất cho mỗi phần tử và là cách phổ biến nhất để xác định vị trí các phần tử bằng ID Locator. .
    Tìm theo tên. Điều này tương tự như Tìm theo ID ngoại trừ trình điều khiển sẽ định vị một phần tử theo thuộc tính “tên” thay vì “id”. .
    Tìm theo LinkText. .
    Tìm theo bộ chọn CSS. .
    Tìm theo XPath

    Làm cách nào để tìm phần tử bằng XPath trong Selenium Python?

    Chuyển đến tab Tên và nhấp chuột phải >> Kiểm tra. Khi kiểm tra phần tử web, nó sẽ hiển thị thẻ đầu vào và các thuộc tính như lớp và id. Sử dụng id và các thuộc tính này để xây dựng XPath, do đó, sẽ định vị trường tên

Chủ Đề