Div sınıfına ait belirli bir metin nasıl alınır

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>

Ö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

1 DebanjanB Jan 29 2021 at 04:42

Metni yazdırmak için 0212 / 897645ikna etmek için var WebDriverWait için visibility_of_element_located()ve aşağıdakilerden birini kullanabilirsiniz Bulucu Stratejileri :

  • Kullanılması CSS_SELECTOR, childNodes ve 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())
    
  • Kullanılması XPATH, get_attribute()ve 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])
    
  • 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?