Comment obtenir du texte spécifique appartenant à la classe div
<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
Pour imprimer le texte, 0212 / 897645
vous 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 etstrip()
: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()
etsplitlines()
: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