Cara mendapatkan teks tertentu yang termasuk dalam kelas div
<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
Untuk mencetak teks 0212 / 897645
Anda harus mendorong WebDriverWait untuk visibility_of_element_located()
dan Anda dapat menggunakan salah satu dari berikut Locator Strategi :
Menggunakan
CSS_SELECTOR
, childNodes danstrip()
: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()
dansplitlines()
: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