Div sınıfına ait belirli bir metin nasıl alınır
<div class="col_5">
<br>
<i class="phone">
:: Before
</i>
0212 / 897645
<br>
<i class="print">
:: Before
</i>
0212 / 111111
<br>
<br>
</div>
Öncelikle bir web sitesinden veri alıyorum ve bu verileri pandaları kullanarak excel'e uyguluyorum.
Yukarıda belirtildiği gibi bir html kodum var. Sonra gelen telefon numarasını alıp diğerine geçmek istiyorum <i class='phone'>
. Bununla birlikte, telefon numarası I sınıfına ait değildir, bu nedenle numaraları yalnızca 'xpath' alarak alabilirim, <div class='col_5'>
ancak bu benim için güvenli değildir çünkü bazı 'div'lerde telefon numarası yoktur ve yalnızca baskı numarası vardır ve bu olabilir benim için ölümcül. Örneğin <div class='col_5'>
bunun gibi xpath'i bulmaya çalışıyorum
num = browser.find_element_by_xpath('div[1]/div/div[103]/div[2]')
num.text.split('\n')
ve çıktı
['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>
Yukarıda telefon numarası olmayan ancak sadece baskı numarası olan kodu paylaştım. <div class='col_5'>
İkinci kodda xpath'i aldığımda sadece baskı numarasını alıyorum ve bunlar olurken veri baskı numaramı telefon numarası olarak ekliyorum. Bu da yanlış verilere neden oluyor. Ve yukarıda belirtildiği gibi aynı şeyleri yaptığımda çıktı
['0201 / 623424', '', 'E-Mail']
Yani ilk maddeyi almaya çalıştığımda baskı numarasını alıyor. Telefon numarası varsa, sadece almak istiyorum, yoksa, alıp devam etmek istiyorum. Mümkün mü?
Yanıtlar
Metni yazdırmak için 0212 / 897645
ikna etmek için var WebDriverWait için visibility_of_element_located()
ve aşağıdakilerden birini kullanabilirsiniz Bulucu Stratejileri :
Kullanılması
CSS_SELECTOR
, childNodes vestrip()
: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())
Kullanılması
XPATH
,get_attribute()
vesplitlines()
:print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[1]/div/div[103]/div[2]"))).get_attribute("innerHTML").splitlines()[4])
Not : Aşağıdaki içe aktarmaları eklemeniz gerekir:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
Referanslar
Birkaç ilgili ayrıntılı tartışmayı şurada bulabilirsiniz:
- Selenium ve Python kullanarak bir metin düğümünden kısmi metin nasıl alınır
- Selenium ve Python kullanarak beyaz boşlukla ayrılmış metin düğümlerinden nasıl metin alınır?