Jak uzyskać określony tekst należący do klasy 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>

Po pierwsze, pobieram dane ze strony internetowej i stosuję te dane, aby osiągnąć sukces za pomocą pand.

Mam kod HTML, jak wspomniano powyżej. Chcę wziąć numer telefonu, który jest podany po tym <i class='phone'>i podać drugi. Jednak numer telefonu nie należy do klasy I, więc mogłem uzyskać numery tylko po uzyskaniu „xpath”, <div class='col_5'>ale nie jest to dla mnie bezpieczne, ponieważ niektóre „div” nie mają numeru telefonu i mają tylko wydrukowany numer i może to być zabójczy dla mnie. Na przykład próbuję znaleźć XPath z <div class='col_5'>tak

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

a wynik jest

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

Powyżej udostępniłem kod, który nie ma numeru telefonu, ale ma tylko numer do druku. Kiedy dostaję xpath <div class='col_5'>w drugim kodzie, otrzymuję tylko numer wydruku i kiedy to się dzieje, dodaję numer wydruku danych jako numer telefonu. A to powoduje nieprawidłowe dane. A kiedy robię dokładnie to samo, co podano powyżej, wynik jest

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

Więc kiedy próbuję wziąć pierwszą pozycję, bierze numer wydruku. Jeśli jest numer telefonu, po prostu chcę go wziąć, jeśli nie, weź go i idź dalej. czy to możliwe?

Odpowiedzi

1 DebanjanB Jan 29 2021 at 04:42

Aby wydrukować tekst 0212 / 897645, musisz wywołać WebDriverWait for the visibility_of_element_located()i możesz użyć jednej z następujących strategii lokalizacji :

  • Używanie CSS_SELECTOR, childNodes i 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())
    
  • Korzystanie XPATH, get_attribute()i 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])
    
  • Uwaga : musisz dodać następujące importy:

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

Bibliografia

Kilka odpowiednich szczegółowych dyskusji można znaleźć w:

  • Jak pobrać częściowy tekst z węzła tekstowego za pomocą Selenium i Python
  • Jak uzyskać tekst z węzłów tekstowych oddzielonych spacjami za pomocą Selenium i Python