Cómo obtener un texto específico que pertenece a la clase 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>

En primer lugar, obtengo datos de un sitio web y los estoy aplicando para sobresalir mediante el uso de pandas.

Tengo un código html como se indicó anteriormente. Quiero tomar el número de teléfono que viene después del <i class='phone'>y pasar el otro. Sin embargo, el número de teléfono no pertenece a la clase I, por lo que solo pude obtener los números obteniendo 'xpath', <div class='col_5'>pero esto no es seguro para mí porque algunos 'divs' no tienen el número de teléfono y solo tienen un número de impresión y esto podría ser mortal para mí. Por ejemplo, trato de encontrar el xpath de <div class='col_5'>eso

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

y la salida es

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

Arriba compartí el código que no tiene el número de teléfono, pero solo tiene el número de impresión. Cuando obtengo el xpath de <div class='col_5'>en el segundo código, obtengo solo el número de impresión y, mientras esto sucede, agrego mi número de impresión de datos como número de teléfono. Y esto está provocando datos incorrectos. Y cuando hago exactamente lo mismo que se indicó anteriormente, el resultado es

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

Entonces, cuando trato de tomar el primer artículo, toma el número de impresión. Si hay un número de teléfono, solo quiero tomarlo, si no, tomarlo y seguir adelante. es posible?

Respuestas

1 DebanjanB Jan 29 2021 at 04:42

Para imprimir el texto 0212 / 897645que tiene que inducir WebDriverWait para el visibility_of_element_located()y se puede utilizar cualquiera de las siguientes estrategias de localización :

  • Usando CSS_SELECTOR, childNodes y 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())
    
  • Usando XPATH, get_attribute()y 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])
    
  • Nota : Debe agregar las siguientes importaciones:

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

Referencias

Puede encontrar un par de discusiones detalladas relevantes en:

  • Cómo recuperar texto parcial de un nodo de texto usando Selenium y Python
  • Cómo obtener texto de nodos de texto separados por espacios en blanco usando Selenium y Python