Cara mendapatkan teks tertentu yang termasuk dalam kelas 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>

Pertama saya mendapatkan data dari situs web dan menerapkan data-data ini untuk unggul dengan menggunakan panda.

Saya memiliki kode html seperti yang disebutkan di atas. Saya ingin mengambil nomor telepon yang ada setelah <i class='phone'>dan melewati yang lain. Namun nomor telepon itu bukan milik kelas I jadi saya hanya bisa mendapatkan nomor dengan mendapatkan 'xpath' dari <div class='col_5'>tetapi ini tidak aman bagi saya karena beberapa 'div' tidak memiliki nomor telepon dan hanya memiliki nomor cetak dan ini bisa jadi mematikan bagi saya. Misalnya saya mencoba mencari xpath <div class='col_5'>seperti itu

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

dan hasilnya adalah

['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>

Di atas saya membagikan kode yang tidak memiliki nomor telepon tetapi hanya memiliki nomor cetak. Ketika saya mendapatkan xpath <div class='col_5'>di kode kedua saya hanya mendapatkan nomor cetak dan ketika ini terjadi saya menambahkan nomor cetak data saya sebagai nomor telepon. Dan ini menyebabkan data tidak benar. Dan ketika saya melakukan hal yang persis sama seperti yang disebutkan di atas, hasilnya adalah

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

Jadi ketika saya mencoba untuk mengambil item pertama, dibutuhkan nomor cetaknya. Kalau ada nomor telepon, saya mau ambil saja, kalau tidak ambil dan jalan terus. Apakah ini mungkin?

Jawaban

1 DebanjanB Jan 29 2021 at 04:42

Untuk mencetak teks 0212 / 897645Anda harus mendorong WebDriverWait untuk visibility_of_element_located()dan Anda dapat menggunakan salah satu dari berikut Locator Strategi :

  • Menggunakan CSS_SELECTOR, childNodes dan strip():

    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())
    
  • Menggunakan XPATH, get_attribute()dan 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])
    
  • Catatan : Anda harus menambahkan impor berikut:

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

Referensi

Anda dapat menemukan beberapa diskusi rinci yang relevan di:

  • Cara mengambil teks parsial dari node teks menggunakan Selenium dan Python
  • Cara mendapatkan teks dari textnodes yang dipisahkan oleh spasi menggunakan Selenium dan Python