Cách lấy văn bản cụ thể thuộc về lớp div

Jan 29 2021

<div class="col_5"> 
       <br>
            <i class="phone">
                  :: Before
                  </i>
                  0212 / 897645
            <br>
                  
                  <i class="print">
                  :: Before
                  </i>
                  0212 / 111111
            <br>
       <br>
</div>

Đầu tiên, tôi lấy dữ liệu gettin từ một trang web và áp dụng những dữ liệu này để vượt trội bằng cách sử dụng gấu trúc.

Tôi có một mã html như đã nêu ở trên. Tôi muốn lấy số điện thoại đến sau <i class='phone'>và chuyển cho số kia. Tuy nhiên, số điện thoại không thuộc về lớp tôi nên tôi chỉ có thể lấy các số bằng cách lấy 'xpath' <div class='col_5'>nhưng điều này không an toàn cho tôi vì một số 'div' không có số điện thoại và chỉ có số in và điều này có thể là chết người cho tôi. Ví dụ, tôi cố gắng tìm xpath của <div class='col_5'>như thế

num = browser.find_element_by_xpath('div[1]/div/div[103]/div[2]')
num.text.split('\n')

và đầu ra là

['02243 / 80343', '02243 / 83261']

<div class="col_5"> 
       <br>
            <i class="phone">
                  ::Before
                  </i>
                  
               <br>
                  <i class="print">
                  ::Before
                  </i> 
                  0201 / 623424
               <br>
        <br>
        <a href="mailto:[email protected]"> <i class="envelope"> </i> E-Mail</a>
 </div>

Trên đây mình đã chia sẻ mã không có số điện thoại mà chỉ có số in. Khi tôi nhận được đường dẫn xpath của <div class='col_5'>trong mã thứ hai, tôi chỉ nhận được số in và trong khi những điều này xảy ra, tôi thêm số in dữ liệu của mình làm số điện thoại. Và điều này gây ra dữ liệu không chính xác. Và khi tôi làm những điều chính xác tương tự như đã nêu ở trên, kết quả đầu ra là

['0201 / 623424', '', 'E-Mail']

Vì vậy, khi tôi cố gắng lấy mục đầu tiên, nó sẽ lấy số in. Nếu có số điện thoại, tôi chỉ muốn lấy nó, nếu không, nó và chuyển tiếp. Điều này có thể không

Trả lời

1 DebanjanB Jan 29 2021 at 04:42

Để in văn bản 0212 / 897645, bạn phải tạo ra WebDriverWait cho visibility_of_element_located()và bạn có thể sử dụng một trong những điều sau Chiến lược Locator :

  • Sử dụng CSS_SELECTOR, childNodesstrip():

    print(driver.execute_script('return arguments[0].childNodes[5].textContent;', WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.col_5")))).strip())
    
  • Sử dụng XPATH, get_attribute()splitlines():

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[1]/div/div[103]/div[2]"))).get_attribute("innerHTML").splitlines()[4])
    
  • Lưu ý : Bạn phải thêm các lần nhập sau:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

Người giới thiệu

Bạn có thể tìm thấy một số cuộc thảo luận chi tiết có liên quan trong:

  • Cách lấy một phần văn bản từ một nút văn bản bằng Selenium và Python
  • Cách lấy văn bản từ các textnodes được phân tách bằng khoảng trắng bằng Selenium và Python