Comment obtenir du texte spécifique appartenant à la classe 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>

Premièrement, j'obtiens des données à partir d'un site Web et j'applique ces données pour exceller en utilisant des pandas.

J'ai un code html comme indiqué ci-dessus. Je veux prendre le numéro de téléphone qui se trouve après le <i class='phone'>et passer l'autre. Cependant, le numéro de téléphone n'appartient pas à la classe I, donc je ne pouvais obtenir les numéros qu'en obtenant `` xpath '' du, <div class='col_5'>mais ce n'est pas sûr pour moi car certains `` divs '' n'ont pas le numéro de téléphone et n'ont qu'un numéro d'impression et cela pourrait être mortel pour moi. Par exemple, j'essaye de trouver le xpath de <div class='col_5'>comme ça

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

et la sortie est

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

Ci-dessus, j'ai partagé le code qui n'a pas le numéro de téléphone mais qui n'a que le numéro d'impression. Lorsque j'obtiens le xpath de <div class='col_5'>dans le deuxième code, j'obtiens uniquement le numéro d'impression et pendant que cela se produit, j'ajoute mon numéro d'impression de données comme numéro de téléphone. Et cela entraîne des données incorrectes. Et quand je fais exactement les mêmes choses que celles indiquées ci-dessus, la sortie est

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

Ainsi, lorsque j'essaie de prendre le premier élément, il prend le numéro d'impression. S'il y a un numéro de téléphone, je veux juste le prendre, sinon, le prendre et passer à autre chose. Est-ce possible?

Réponses

1 DebanjanB Jan 29 2021 at 04:42

Pour imprimer le texte, 0212 / 897645vous devez induire WebDriverWait pour le visibility_of_element_located()et vous pouvez utiliser l'une des stratégies de localisation suivantes :

  • Utilisation CSS_SELECTOR, childNodes et 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())
    
  • Utilisation XPATH, get_attribute()et 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])
    
  • Remarque : vous devez ajouter les importations suivantes:

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

Les références

Vous pouvez trouver quelques discussions détaillées pertinentes dans:

  • Comment récupérer du texte partiel à partir d'un nœud de texte à l'aide de Selenium et Python
  • Comment obtenir du texte à partir de nœuds de texte séparés par des espaces en utilisant Selenium et Python